PIRMER STL笔记(第三章中提到的vector)

来源:互联网 发布:单片机直流电机调速 编辑:程序博客网 时间:2024/06/05 22:47

第三章,3.3标准库Vector类型

Vector是其中一种容器,不是一种数据类型,只是其中一个类模板,可以用来定义任意多种数据类型。

初始化方式:1.vector<T> v1;// (保存类型为T对象,默认构造函数v1为空)2.vctor<T>v2(v1);//( v2是v1的一个副本)3.vector<T>v3(n,i);//(v3中含有N个值为 i 的元素)4.vector<T>v4(n);//v4含有n个初始化值的元素。

值的初始化:如果没有指定元素的初始化式,标准库会自行提供一个元素初始化值进行值的初始化。如INT为0

vector标准库提供了对象的操作:v.empty()//v为空返回true,否则返回false。v.size();//返回v中元素的个数

v.push_back(t);在v的末尾增加一个值为t的元素。v[n]//返回v中位置为n的元素。v1=v2//把v1的元素替换为v2中元素的副本。v1==v2如果相等则返回true。

下标操作[]不能添加元素。仅能对确知已存在的元素进行下标操作。vector<int> ivec; // empty vector
cout << ivec[0]; // Error: ivec has no elements!


迭代器简介:每种容器类型都定义了自己的迭代器类型 如vector<int>::iterator iter;

每种容器都定义了一对命名为 begin 和 end 的函数,用于返回迭代器(只用于迭代器)。如果容器中有元素的话,由 begin 返回的迭代器指向第一个元素:vector<int>::iterator iter = ivec.begin();上述语句把 iter 初始化为由名为 vector 操作返回的值。假设 vector 不空,初始化后,iter 即指该元素为 ivec[0]。由 end 操作返回的迭代器指向 vector 的“末端元素的下一个”。“超出末端迭代器”(off-the-end iterator)。表明它指向了一个不存在的元素。如果 vector 为空,begin 返回的迭代器与 end 返回的迭代器相同。


vector 迭代器的自增和解引用运算  :迭代器使用自增操作符(1.4.1 节)向前移动迭代器指向容器中下一个元素。从逻辑上说,迭代器的自增操作和 int 型对象的自增操作类似。对 int 对象来说,操作结果就是把 int 型值“加 1”,而对迭代器对象则是把容器中的迭代器“向前移动一个位置”。因此,如果 iter 指向第一个元素,则 ++iter 指向第二个元素。


const_interator 每种容器类型还定义了一种名为 const_iterator 的类型,该类型只能用于读取容器内元素,但不能改变其值。

不要把 const_iterator 对象与 const 的 iterator 对象混淆起来。声明一个 const 迭代器时,必须初始化迭代器。一旦被初始化后,就不能改变它的值:const vector<int>::iterator cit = nums.begin();*cit = 1; // ok: cit can change its underlying element
++cit;// error: can't change the value of cit一旦它被初始化后,只能用它来改写其指向的元素,但不能使它指向任何其他元素
,cit的值(指向地址)不能变只能改变*cit的值。

而对于const_interator

vector<int>::const_iterator it = nines.begin();
*it = 10; // error: *it is const
++it; // ok: it isn't const so we can change its value

刚好相反。

迭代器运算vector<int>::iterator mid = vi.begin() + vi.size() / 2;




0 0
原创粉丝点击