Stay determined.

C++中vector的使用

Posted on By Yang Guang
Viewed   times

两种使用方式

================================================================================================

STL方式

向vector插入元素,不再是索引元素,而是在vector后面插入一个元素

下面的while语句循环从标准输入读入一个string序列,并每次将string插入到vector中。

vector <int> v;
while{cin >> string}{
	v.push_back(string);
}

我们仍可以用访问下标的形式迭代访问元素

for(int i = 0; i < v.sizeof(); i++){
	cout << v[i] << endl;
}

但是更典型的做法是使用vector操作集中的begin()和end()以及迭代器iterator。

for (vector <string>::iterator i = v.begin(); 
    i != v.end(); i++ ) 
    cout << *i << endl;

iterator

是标准库中的类,它具有指针的功能

*i

对迭代器解引用,并访问其指向的实际对象

类数组方式

1.定义有初始长度的vector

vector v(10);

通过v[下标]访问元素,使用v.empty()判空, v.size()返回vector长度。

此时v.empty()返回0,即v不空,打印验证得vector中存放10个0,可知0是缺省值。


2.由1的扩展,有初始值的vector

vector v(10, 2);

定义10个元素的vector,每个元素都被初始化为2。


3.借助内置数组初始化

int a[5] = {1, 2, 3, 4, 5};

vector v(a, a+5); vector v(&a[0], &a[5]);

//注意在vector中,左右两个指针永远是左包含,右不包含

//所以右边是a+5而不是a+4。习惯就好。


4.借助另一个vector初始化

vector v(3, 2);//v中包含3个2

vector v2(v);//把v初始化v2;

vector v2 = v;//把v拷贝给v2;

vector使用总结

================================================================================================

初始化

vector有7种方式。

(1)vector v;

(2)vector v(10);

(3)vector v(10, 2);

(4)vector v(v2);//v2是另一个vector

(5)vector v = v2;//v2是另一个vector

(6)vector v(v2.begin()+3, v.begin()+6);//v2的第4、第5、第6个元素

(7)vector v(a+3, a+6);或vector v(&a[3], &a[6]);

//a是内置数组。把a的第4、5、6个元素赋给v。

vector常用操作

(1)a.assign(b.begin(), b.begin()+3);//b为向量,将b的0~2个元素构成的向量赋给a

(2)a.assign(4,2);//是a只含4个元素,且每个元素为2

(3)a.back();//返回a的最后一个元素

(4)a.front();//返回a的第一个元素

(5)a[i]; //返回a的第i个元素,当且仅当a[i]存在2013-12-07

(6)a.clear();//清空a中的元素

(7)a.empty();//判断a是否为空,空则返回ture,不空则返回false

(8)a.pop_back();//删除a向量的最后一个元素

(9)a.erase(a.begin()+1,a.begin()+3);//删除a中第1个 (从第0个

算起)到第2个元素,也就是说删除的元素从a.begin()+1算起 (包括它)一直到a.begin()+3 (不包括它)

(10)a.push_back(5);//在a的最后一个向量后插入一个元素,其值为5

(11)a.insert(a.begin()+1,5);//在a的第1个元素 (从第0个算起)的位置插入数值5,如a为1,2,3,4,插入元素后为1,5,2,3,4

(12)a.insert(a.begin()+1,3,5);//在a的第1个元素 (从第0个算起)的位置插入3个数,其值都为5

(13)a.insert(a.begin()+1,b+3,b+6);//b为数组,在a的第1个元素 (从第0个算起)的位置插入b的第3个元素到第5个元素 (

不包括b+6),如b为1,2,3,4,5,9,8,插入元素后为1,4,5,9,2,3,4,5,9,8

(14)a.size();//返回a中元素的个数;

(15)a.capacity();//返回a在内存中总共可以容纳的元素个数

(16)a.rezize(10);//将a的现有元素个数调至10个,多则删,少则补,其值随机

(17)a.rezize(10,2);//将a的现有元素个数调至10个,多则删,少则补,其值为2

(18)a.reserve(100);

//将a的容量 (capacity)扩充至100,也就是说现在测试a.capacity();的时候 返回值是100.这种操作只有在需要给a添加大

量数据的时候才 显得有意义,因为这将避免内存多次容量扩充操作

(19)a.swap(b);//b为向量,将a中的元素和b中的元素进行整体性交换

(20)a==b; //b为向量,向量的比较操作还有!=,>=,<=,>,<

易错点

vector<int> v;
for(int i=0;i<10;i++)
	v[i]=i;

下标只能用于获取已存在的元素,而现在的a[i]还是空的对象

无论是查看a[i]还是对a[i]赋值都是错误的。

当v初始化下面这样写就是对的。

vector v(10);




================================================================================================