vector
vector向量容器不但能像数组一样对元素进行随机访问,还能在尾部插入元素,是一种简单、高效的容器,完全可以代数组。
值得注意的是,vector具有内存自动管理的功能,对于元素的插入和删除,可动态调整所占的内存空间。
使用vector向量容器,需要头文件包含声明“#include <vector>”。
vector文件在C:\Program Files\Microsoft Visual Studio\VC98\Include文件夹中可以找。vector容器的下标是从0开始计数的,也就是说,如果vector容器的大小是n,那么,元素的下标是0~n-1。
对于vector容器的容量定义,可以事先定义一个固定大小,事后,可以随时调整其大小;也可以事先不定义,随时使用push_back()方法从尾部扩张元素,也可以使用insert()在某个元素位置前插入新元素。
vector容器有两个重要的方法,
begin()
返回的是首元素位置的迭代器;
end()
返回的是最后一个元素的下一元素位置的迭代器。
创建vector对象
创建vector对象常用的有三种形式。
(1)不指定容器的元素个数,如定义一个用来存储整型的容器:
vector<int> v;
(2)创建时,指定容器的大小,如定义一个用来存储10个double类型元素的向量容器:
vector<double> v(10);
注意,元素的下标为0~9;
另外,每个元素的值被初始化为0.0。
(3)创建一个具有n个元素的向量容器对象,每个元素具有指定的初始值:
vector<double> v(10,8.6);
上述语句定义了v向量容器,共有10个元素,每个元素的值是8.6。
尾部元素扩张
#include <vector>
using namespace std;
int main(int argc, char* argv[])
{
vector<int> v;
v.push_back(2);
v.push_back(7);
v.push_back(9);
return 0;
}
下标方式访问
#include <vector>
#include <iostream>
using namespace std;
int main(int argc, char* argv[]) {
vector<int> v(3);
v[0]=2;
v[1]=7;
v[2]=9;
cout<<v[0]<<" "<<v[1]<<" "<<v[2]<<endl;
return 0;
}
用迭代器访问
#include <vector>
#include <iostream>
using namespace std;
int main(int argc, char* argv[]) {
vector<int> v(3);
v[0]=2;
v[1]=7;
v[2]=9;
// 定义迭代器变量
vector<int>::iterator it;
for(it=v.begin(); it!=v.end(); it++) {
// 输出迭代器上的元素值
cout<<*it<<" ";
}
// 换行
cout<<endl;
return 0;
}
元素的插入
insert()方法可以在vector对象的任意位置前插入一个新的元素,同时,vector自动扩张一个元素空间,插入位置后的所有元素依次向后挪动一个位置。
下面的代码输出的结果是8,2,1,7,9,3:
#include <vector>
#include <iostream>
using namespace std;
int main(int argc, char* argv[]) {
vector<int> v(3);
v[0]=2;
v[1]=7;
v[2]=9;
// 在最前面插入新元素,元素值为
8
v.insert(v.begin(),8);
// 在第
2
// 个元素前插入新元素
1
v.insert(v.begin()+2,1);
// 在向量末尾追加新元素
3
v.insert(v.end(),3);
// 定义迭代器变量
vector<int>::iterator it;
for(it=v.begin(); it!=v.end(); it++) {
// 输出迭代器上的元素值
cout<<*it<<" ";
}
// 换行
cout<<endl;
return 0;
}
元素的删除
clear()方法则一次性删除vector中的所有元素。
下面这段代码演示了vector元素的删除方法:
#include <vector>
#include <iostream>
using namespace std;
int main(int argc, char* argv[]) {
vector<int> v(10);
//给向量赋值
for(int i=0; i<10; i++) {
v[i]=i;
}
//删除2个元素,从0开始计数
v.erase(v.begin()+2);
//定义迭代器变量
vector<int>::iterator it;
for(it=v.begin(); it!=v.end(); it++) {
//输出迭代器上的元素值
cout<<*it<<" ";
}
// 换行
cout<<endl;
//删除迭代器第1到第5区间的所有元素
v.erase(v.begin()+1,v.begin()+5);
for(it=v.begin(); it!=v.end(); it++) {
//输出迭代器上的元素值
cout<<*it<<" ";
}
//换行
cout<<endl;
//清空向量
v.clear();
//输出向量大小
cout<<v.size()<<endl;
return 0;
}
运行结果:
0 1 3 4 5 6 7 8 9
0 6 7 8 9
0
使用reverse反向排列算法
reverse反向排列算法,需要定义头文件“#include <algorithm>”,algorithm文件位于C:\Program Files\Microsoft Visual Studio\VC98\Include文件夹中。
reverse算法可将向量中某段迭代器区间元素反向排列,看下面这段代码:#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main(int argc, char* argv[]) {
vector<int> v(10);
// 给向量赋值
for(int i=0; i<10; i++) {
v[i]=i;
}
// 反向排列向量的从首到尾间的元素
reverse(v.begin(),v.end());
// 定义迭代器变量
vector<int>::iterator it;
for(it=v.begin(); it!=v.end(); it++) {
// 输出迭代器上的元素值
cout<<*it<<" ";
}
// 换行
cout<<endl;
return 0;
}