- vector类型:
- vector是c++标准模板库库中得一员,使用的时候需要包含:#include <vector>头文件
- vector是同一种数据类型的集合,每个成员都对应一个索引值。
- 标准库会管理相关内存。
- vector不是一种数据类型,而是一个类模板。
- vector类型每一种实例都指定了他保存的数据类型。从而,vector<int>,vector<string>等是一种自定义的数据类型。
- vector的初始化方式:
(1)使用默认初始化 vector<T> v1; 使用类型T的默认构造函数(如果类没有定义默认构造函数,那么标准库仍然产生一个带初始化值的对象。最好在自己的类中定义默认构造函数)。如果是内置类型的,那么使用0值创建初始化
(2)拷贝初始化vector<T> v1(v2); 使用这种方式的时候,v1和v2需要是同一种数据类型。
(3)值初始化:vector<T> v1(n,t)或者vector<T> v2(t);
- vector对象和其他标准库容器对象的一个重要属性:运行时,高效添加元素
- vector支持的操作:vector<T> vec1;
(1)vec1.empty() 如果vec1为空,那么返回true。否则返回false
(2)vec1.size() 返回vec1中的元素的个数
(3)vec1.push_back(v1) 在vec1的末尾添加v1
(4)vec1[n] 返回vec1中第(n-1)个元素的值。n必须在小于vec1.size()
(5)vec1 = vec2; 把vec1中得元素替换为vec2的副本
(6)vec1 == vec2; 如果vec1 等于vec2那么返回true
(7)> , >= , < , <= , !=都和内置类型意义一样。
- 对于size()函数,一般使用size_type保存,和string的size_type类似,需要指明你要使用的size_type是什么类型的。
vector<int> size_type; //ok
vector size_type; //error
- 向vector添加元素: push_back()函数。
vector <int> vec1;
vec1.push_back(10); //ok
- vector的下表操作不能提供添加元素的操作.下表操作只能获取已经存在的元素。这一条的意思就是说如果对于一个vector<int> vec1 来说,如果这个vector中不存在元素,那么如果想通过下表操作来个这个容器添加元素是不允许的。相反,如果这个元素现在已经确定,这个容器中又两个元素 0 和 1,如果通过下表让第一个元素的值变为2是可以的, vec1[0] = 2;//ok。
- 特别需要强调的是对于vector来说,下表操作只能使用于确知已存在的元素
- 除了使用下标操作符访问vector中得元素之外,标准库还提供了另外一种方式:迭代器:
1.定义:迭代器是一种检查容器中元素并遍历元素的一种数据类型。(这个定义适用于标准库定义的容器)
2.每种标准库的容器都定义了对应的迭代器数据类型。vector<class T>::iterator MyIter;
3.每个标准库容器类型都定义了一个名为iterator的成员,这里的iterator与迭代器实际类型的含义相同。
- vector容器的begin和end操作。
- begin函数返回容器中指向第一个元素的迭代器.
vector<int> MyVec(n,10);
vector<int>::iterator MyIter;
MyIter = MyVec.begin();
- begin函数返回容器中指向第一个元素的迭代器.
end函数返回容器中指向最后一个元素的下一个位置的迭代器。通常end的操作结果叫做"超出末端迭代器",这个函数返回的迭代器指向的是一个不存在的元素。如果容器为空,那么MyVec.begin() == MyVec.end();迭代器类型可以使用解引用操作符(*) 来访问迭代器所指向的元素。由于容器的end()函数返回的是超出末端元素的位置,所以不能对end()返回的迭代器作解引用操作。如果两个迭代器执行同一个元素,那么这两个迭代器就相等。但是对于vector容器来说,两个值相等的元素,他们对应的迭代器的值是不一样的。(可以参照下边代码做一个实验) vector<int> vec1;
vec1.push_back(1);
vec1.push_back(3);
vec1.push_back(3);
vector<int>::iterator it1, it2;
it1 = vec1.begin();
it2 = vec1.begin() + 2;
if (it1 == it2)
cout << "yes" << endl;
else
cout << "no" << endl;
m. 使用迭代器重置容器元素的值和下表操作相似在容器中我们可以使用iterator来访问或者改变元素的值,但是在某种状况下,我们只希望这个迭代器能只访问元素的值,但是不对元素的值进行更改,这个时候我们就需要使用const_iterator来实现。和普通的iterator唯一不同的是,我们使用const_iterator不能修改容器中元素的值,而只能访问这个容器的值。 在具体的使用中,我们需要根据情况来选择使用哪一种迭代器。