vector 是同一种类型的对象的集合,类似于数组,每个对象都有一个对应的整数索引值。
它和 string 对象一样,系统将负责管理与存储元素相关的内存。
我们把 vector称为容器,是因为它可以包含其他对象。一个容器中的所有对象都必须是同一种类型的。
使用 vector 之前,必须包含相应的头文件
#include <vector>
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<T> v5{a,b,c...};//v5包含了初始值个数的元素,每个元素被赋予相应的初始值
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
*JH 2017-3-13
*/
#include <iostream>
#include <vector>
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)”:*
*JH 2017-3-13
*/
#include <iostream>
#include <vector>
#include <string>
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 开始
*JH 2017-3-13
*/
#include <iostream>
#include <vector>
#include <string>
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 iter1;//iter1能读写vector<int>的元素
string::iterator iter2;//iter2能读写string对象中的字符
vector<int>::const_iterator iter3;//iter3只能读元素,不能写元素
string::const_iterator iter4;//iter4只能读字符,不能写字符
begin和end运算符
begin和end返回的具体类型由对象是否是常量决定,如果对象是常量,begin和end返回const_iterator;如果对象不是常量,返回iterator;
vector<int> v;
const vector<int> cv;
auto iter1 = v.begin();
auto iter2 = v.end();
/*
* 迭代器应用的程序示例
* JH 2017-3-13
*/
#include <iostream>
#include <vector>
#include <string>
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::const_iterator iter; //对 const_iterator 类型解引用时,则可以得到一个指向 const 对象的引用
for (iter = ivec.begin(); iter != ivec.end(); iter++)
cout << *iter << "\t";
cout << endl;
return 0;
}