使用 vector 之前,必须包含相应的头文件,vector 属于 std 命名域的,因此需要通过命名限定:
#include<vector>
using std::vector; //using namespace std;
vector 对象的定义和初始化
vector<int> a;
vector<int> b(a);
vector<string> a(6,'a');
vector<int> a(10);
常见操作
#include <iostream>
#include<vector>
using namespace std;
int main(){
vector<int> a(5); //创建5个int类型vector对象,相当于a[5],每个元素的值为0
if( true == a.empty() ){
cout << "it is empty\n";
}else if(false == a.empty() ){ //结果不为空
cout << "it is not empty\n";
}
//返回 a 中元素的个数。
cout << "size = " << a.size() << endl; // 结果为10
// 在 a 的末尾增加一个值为 5 的元素。
// 本来有5个元素,再添加一个,变为6个
a.push_back(5);
//下标操作元素,有6个元素,0~5
//打印最后一个元素
cout << a[a.size() -1] << endl; //结果为 5
// 下标法,把所有元素的值打印出来
// vector<int>::size_type 可以当做 int 使用
for(vector<int>::size_type i = 0; i != a.size(); i++) {
cout << a[i] << ", ";
}
cout << endl;
a.pop_back(); //删除容器最后位置处的元素
// 下标法,给所有元素赋值
for(vector<int>::size_type i = 0; i != a.size(); i++) {
a[i] = 5;
}
// 把 a 所有元素的值打印出来
for(vector<int>::size_type i = 0; i != a.size(); i++){
cout << a.at(i) << ", ";
}
cout << endl;
vector<int> b = a; //b是a的复制品
for(vector<int>::size_type i = 0; i != a.size(); i++){
cout << b[i] << ", ";
}
a.clear(); //清除所有元素
cout << "size after clear = " << a.size() << endl;
return 0;
}
迭代器操作 vector 对象
标准库还提供了另一种访问元素的方法:使用迭代器(iterator) 。迭代器是一种检查容器内元素并遍历元素的数据类型。实际上,vector 对象相当于数组,而迭代器就相当于指针。
每种容器类型都定义了自己的迭代器类型,如 vector
vector<int>::iterator iter;
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> v(6, 5); //有6个元素,每个元素的值都是5
//通过迭代器把所有元素的值打印出来
vector<int>::iterator it;
for( it=v.begin(); it!=v.end(); it++){
cout<< *it << ", ";
}
cout << endl;
//通过迭代器给所有元素赋值为1
for( it=v.begin(); it!=v.end(); it++){
*it = 1;
}
cout << endl;
it = v.begin(); //返回指向容器最开始位置元素的指针(迭代器)
//删除指针it+1指向位置的元素,返回指向下一个元素位置的指针(迭代器)
v.erase(it+1);
cout << endl << "after erase:\n";
//通过迭代器把所有元素的值打印出来
for( it=v.begin(); it!=v.end(); it++)
{
cout<< *it << ", ";
}
cout << endl;
it = v.begin();
//在位置it后插入3个6
v.insert(it, 3, 6);
//通过迭代器把所有元素的值打印出来
for( it=v.begin(); it!=v.end(); it++){
cout<< *it << ", ";
}
cout << endl;
return 0;
}