注意:for循环中使用“!=”来代替“<”符号进行条件判断。
vector是同一种类型的集合,使用时需要
#include<vector>
using std::vector;
1、vector可以保存系统的数据类型也可以保存自定义对象类型:
vector<int> ivec;//ivec holds object of int .
vector<my_type> my_ivec;//my_ivec holds my type of my_type.
2、vector 的初始化:
vector<T>v1;//v1保存类型位T对象,默认构造函数v1为空
vector<T>v2(v1);//将v1拷贝给v2。
vector<T>v3(n,i);//v3包含n个值为i的元素。
vector<T>v4(n);//v4含有n个元素(n个T类型元素已经自动初始化为对应值)
3、vector的一些操作:
vector<T>v1;
v1.empty();//判断v1这个是否为空,如果为空返回true,不为空返回false。
v1.size();//返回v1中的元素个数。
v1.push_back(t);//在v1的最后一个元素后新增一个类型为t的元素。
v1=v2;//把v2元素赋值给v1。
v1==v2;//判断v1中元素的值是否等于v2,是就返回true。
4、size_type的使用:
vector<T>::size_type;//必须指出是T类型vector的大小
5、向vector中添加元素:
vector <T> v;//定义T类型vector。
T val;//使用T类型定义一个变量。
cin>>val;//将标准输入流中数据给val变量。
v.push_back(val);//将val中T类型数值通过push_back()放入v中最后一个位置。
6、vector的下标运用:
vector <T>v;//定义一个vector类型的变量。
T val;//定义一个T类型的变量。
v[i]=val;//将val中的值赋给v中第i个元素。
迭代器(iterator)是一种用于遍历容器内全部元素的数据类型。
1、迭代器的定义:
vector<T>::iterator iter;//定义一个T类型vector的迭代器。
2、迭代器的使用:
在vector中有begin和end函数,分别作用是取得第一个和最后一个数的值。
vector <T> v;//定义一个T类型的vector容器。
vector <T>::iterator iter = v.begin();//定义一个T类型的iter迭代器,并且将v中的第一个元素赋给iter。
在vector迭代器中有一种“解引用操作符(*)”(dereference operator),可以用(*)操作符去访问迭代器所指向的元素的值。
*iter = 0;//将iter指向的v中第一个元素的值改为0。
++iter;//使迭代器自增指向下一个元素。
3、迭代器的比较:
使用==和!=符号比较两个迭代器,当两个迭代器指向同一个元素时他们相等,否则不等。
4、for循环使用迭代器范例:
//例一、使用for循环运用下标将ivec中的所有元素全部置换成0。
for(vector<int>::size_type ix =0 ; ix != ivec.size() ; ix++)
{
ivec[ix] = 0;
}
//例二、使用for循环用迭代器将ivec中的所有元素全部置换成0。
for(vector<int >::iterator iter = ivec.begin() ; iter!=ivec.end() ; ++iter)
{
*iter = 0;
}
5、vector <T>::const_iterator iter 和 const vevtor<T>::iterator iter 的区别:
第一种 vector <T>::const_iterator iter;
只能读取元素内的元素,不能改变元素的值。
第二种const vevtor<T>::iterator iter;//必须先初始化。
const vevtor<T>::iterator iter = ivec.begin();//必须先初始化。
*iter= 1;//可以改变当前位置的值。
++iter;//该句是错误的,不可以改变当前的位置。
6、迭代器的算术操作
iter+n;//迭代器iter加上n,指在当前迭代器所在的位置i(如在vector第一个元素位置)之前加上n个元素后的位置。
iter-n;//迭代器iter减去n,指在当前迭代器的所在位置之后减n个元素的位置
(begin-----------------(iter-n)i-n--------------------i----------------------(iter+n)i+n-----------------end)
iter1 - iter2
用来计算两个迭代器对象之间的距离,使用的是difference_type 的 signed类型size_type的值。iter1和iter2两者必须指向同一个vector元素或者指向vector末端的下一元素。
vector<int > ::iterator iter = ivec.begin()+ ivec.size()/2;//使iter指向ivec中间位置元素。