vector 初始化所有方法


简介:
vector可用于代替C中的数组,或者MFC中的CArray,从许多说明文档或者网上评论,一般一致认为应该多用vector,因为它的效率更高,而且具备很好的异常安全性。而且vector是STL推荐使用的默认容器,除非你知道你有特殊需要,使用vector不能满足你的需求,例如需要容器在head和tail高效的插入和删除,或者在任何位置高效的删除和插入操作,那么你可能使用deque或者list更加合适。

vector是连续内存容器,换句话说,标准要求所有标准库实现的时候,vector中的元素的内存必须是连续的。所以对于插入和删除的时间复杂度是很高的,因为删除或者插入的时候,需要元素的移动,即元素复制拷贝。

vector的内部实现一般需要用到placement new ,所以效率很高,因为很多的时候,只要我们是使用得到,就可以省去很多的内存分配开销。而且vector的使用,元素可以没有默认的构造函数,但是需要拷贝构造函数的存在,这是使用CArray所无法实现的。

使用原则:

  1. 尽量使用vector代替C风格的数组或者CArray;
  2. 尽量使用算法代替手工写的循环;
  3. 尽量使用vector本身的函数代替其他泛型算法;

vector的接口很容易看懂和使用,这里以一些例子来说明vector的用法。

1,填充vector

如果我们想用原始数组的内容填充vector,那么于有很多种方式。我们来一次学习vector的几个方法。

例如我们有数组int  v1[10] = {0,1,0,0,3,0,0,4,4,4};

初始化方式1:

1 vector<int> v2(10); //初始化size为10可以避免数组动态增长的时候不断的分配内存
2 //v2.reserve(10);//同上,只要使用其中一个就可以了
3 forint i=0; i<10; i++ )
4 {
5 v2.push_back(v1[i]);//增加一个元素
6 }

初始化方式2

1 vector<int> v3(&v1[0],&v1[9]);//原始数组的元素指针可以作为迭代器来使用

初始化方式3

1 vector<int> v4;
2 v4.reserve(10);
3 v4.insert(v4.begin(), &v1[0], &v[9]);

初始化方式4:

1 vector<int> v5(10);
2 copy(v5.begin(), &v1[0], &v1[9]);

原始数组的元素指针可以作为迭代器来使用。

原则:尽量使用reserve来减少不必要的内存分配次数。

原则:尽量使用empty而不是size()==0 来判断容器是否为空

有可能我们需要在vector中插入相应的元素

1 vector<int>::iterator i = find( v1.begin(), v1.end(), 3);
2 if( i != v1.end() )
3 {
4 v1.insert( i, 6 );
5 }

原创文章,转载请注明: 转载自C/C++程序员之家

本文链接地址: STL之vector的使用一(初始化vector)

时间: 2024-08-01 22:41:58

vector 初始化所有方法的相关文章

C++-二维vector初始化大小方法-备忘

来源: C++——二维vector初始化大小方法 1.直接用初始化方法 名字为vec,大小为n*m,初始值为0的二维vector. vector<vector<int> > vec(n, vector<int>(m, 0)); 2.用resize()来控制大小 vector<vector<int> > vec; vec.resize(n);//n行 for (int i = 0; i < n; ++i){ vec[i].resize(m);

实战c++中的vector系列--再谈vector的insert()方法(都是make_move_iterator惹的祸)

之前说过了关于vector的insert()方法,把vector B的元素插入到vector A中,vector A中的结果我们可想而知,但是vector B中的元素还会如何? 看看之前写过的程序: #include <iostream> #include <vector> int main () { std::vector<int> myvector (3,100); std::vector<int>::iterator it; it = myvector

Vector 初始化

Vector是对象的集合. 一.默认初始化 vectot<string> svec; //默认初始化,svec不含任何元素 二.拷贝 vector<string> svec1(svec); vector<string> svec2 = svec; 三.列表初始化 vector<string> svec{"a", "an", "the"}; 四.指定数量 vectot<string> sv

Java中vector的使用方法

Vector的使用 vector类底层数组结构的,它包含可以使用整数索引进行访问的组件.不过,vector的大小可以根据需要增大或缩小,以适应创建vector后进行添加或移除项的操作,因此不需要考虑元素是否越界或者会不会浪费内存的问题. 由vector的iterator和listIterator方法所返回的迭代器是快速失败的:也即是它不能并发执行操作.如果在迭代器创建后的任意时间从结构上修改了向量(通过迭代器自身的remove或add方法之外的任何其他方式),则迭代器将抛出ConcurrentM

【STL】vector的insert方法详解

#include<vector> #include<iostream> using namespace std; int main() { vector<int> v(3); v[0]=2; v[1]=7; v[2]=9; v.insert(v.begin(),8);//在最前面插入新元素. v.insert(v.begin()+2,1);//在迭代器中第二个元素前插入新元素 v.insert(v.end(),3);//在向量末尾追加新元素. vector<int

3.1.3 STL中list、map、vector的使用方法

(一)list的使用方法: 代码: #include <iostream> #include <list> #include <algorithm> #include <numeric> #include <iterator> using namespace std; typedef list<int> LISTINT; typedef list<char> LISTCHAR; int main() { LISTINT l

神经网络中权值初始化的方法

from:http://blog.csdn.net/u013989576/article/details/76215989 权值初始化的方法主要有:常量初始化(constant).高斯分布初始化(gaussian).positive_unitball初始化.均匀分布初始化(uniform).xavier初始化.msra初始化.双线性初始化(bilinear) 常量初始化(constant) 把权值或者偏置初始化为一个常数,具体是什么常数,可以自己定义 高斯分布初始化(gaussian) 需要给定

vector初始化

对vector对象来说,直接初始化的方式适用于3种情况:1.初始值已知且数量少:2.初始值是另一个vector对象的副本:3.所有元素的初始值都一样.此外还有一种更常见的情况是4.创建一个vector对象时并不清楚实际所需元素的个数,元素的值也无法确定.或者元素的初值已知,但如果这些总量较大而各部相同(对于这种情况,更好的处理方法是先创建一个空vector,然后再运行时再利用vector的成员函数push_back向其中添加元素). 1.vector<T> v1 v1是一个空vector,它潜

vector数据查找方法

用STL编写程序时经常使用vector容器来存储数据,当容器中的数据有序时我们可以采取两种方式: (1) 利用<algorithm>中的find函数进行查找: (2) 折半查找. 另外也可以将数据存入hash_map中进行查找,下面来测试比较这两种方法的时间效率. 1. 测试数据集 生成比99999小的所有素数作为查询数据集,查找2到99999之间的所有数. 令数组A存储2~99999之间的所有数,则生成素数的方式 (1) 找到当前最小的数字min: (2) 然后删除min的所有倍数. 重复这