分类: C/C++
2011-08-11 23:41:56
参考《C++Primer4th第四版中文版》
vector 是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。
和 string 对象一样,标准库将负责管理与存储元素相关的内存。
我们把 vector称为容器,是因为它可以包含其他对象。一个容器中的所有对象都必须是同一种类型的。
使用 vector 之前,必须包含相应的头文件
#include
using std::vector;
vector 是一个类模板(class template)。使用模板可以编写一个类定义或函数定义,而用于多个不同的数据类型。因此,我们可以定义保存 string 对象的 vector,或保存 int 值的 vector,又或是保存自定义的类类型对象(如Sales_items 对象)的 vector。
vector 不是一种数据类型,而只是一个类模板,可用来定义任意多种数据类型。vector 类型的每一种都指定了其保存元素的类型
初始化 vector
vector<T> v1; vector 保存类型为 T 对象。默认构造函数 v1 为空。
vector<T> v2(v1); v2 是 v1 的一个副本。
vector<T> v3(n, i); v3 包含 n 个值为 i 的元素。
vector<T> v4(n); v4 含有值初始化的元素的 n 个副本。
vector 对象的操作
v.size() 返回 v 中元素的个数。
v.empty() 如果 v 为空,则返回 true,否则返回 false。
v.push_back(t) 在 v 的末尾增加一个值为 t 的元素。
v[n] 返回 v 中位置为 n 的元素。
v1 = v2 把 v1 的元素替换为 v2 中元素的副本。
v1 == v2 如果 v1 与 v2 相等,则返回 true。
!=, <, <=,>, and >= 保持这些操作符惯有的含义。
/*
* vector 对象的操作
* 对象的 size
* Lzy 2011-8-11
*/
#include
#include
using namespace std;
int main(void)
{
vector<int> ivec(10,0); //创建对象初始化值为0,共有10个元素
cout<<ivec.size()<<endl;
return 0;
}
/*
* vector 对象的操作
* 向 vector 添加元素
* push_back 操作接受一个元素值,并将它作为一个新的元素添加到 vector对象的后面,
* 也就是“插入(push)”到 vector 对象的“后面(back)”:*
* Lzy 2011-8-11
*/
#include
#include
#include
using namespace std;
int main(void) {
string word;
vector<string> text;
while (cin >> word)
text.push_back(word);
return 0;
}
/*
* vector 对象的操作
* vector 的下标操作
* ector 的下标操作符接受一个值,并返回 vector 中该对应位置的元素。
* vector 元素的位置从 0 开始
* Lzy 2011-8-11
*/
#include
#include
#include
using namespace std;
int main(void) {
vector<int> ivec;
for (int i = 0; i < 10; i++)
ivec.push_back(i);
for (vector<int>::size_type x = 0; x != ivec.size(); x++)
cout << ivec[x] << "\t";
cout << endl;
return 0;
}
迭代器简介
除了使用下标来访问 vector 对象的元素外,标准库还提供了另一种访问元素的方法:使用迭代器(iterator)。迭代器是一种检查容器内元素并遍历元素的数据类型。
容器的 iterator 类型
每种容器类型都定义了自己的迭代器类型,如 vector:
vector<int>::iterator iter;
/*
* 迭代器应用的程序示例
* Lzy 2011-8-11
*/
#include
#include
#include
using namespace std;
int main(void) {
vector<int> ivec;
for (int i = 0; i < 10; i++)
ivec.push_back(i);
vector<int>::iterator iter; //定义一个迭代器名为 iter 的变量
//vector
for (iter = ivec.begin(); iter != ivec.end(); iter++)
cout << *iter << "\t";
cout << endl;
return 0;
}