STL容器为我们提供了这样的方便,它允许我们重复利用已有的实现构造自己的特定类型下的数据结构,通过设置一些模版类,STL容器对最常用的数据结构提供了支持,这些模板的参数允许我们指定容器中元素的数据类型。
容器部分主要由头文件<vector>,<list>,<deque>,<set>,<map>,<stack>和<queue>组成。
向量(vector)
向量(vector容器类):头文件 #include<vector> ,vector是一种动态数组,是基本数组的类模板。
迭代器:(iterator)
包含的头文件#include<iterator>
迭代器实际上是一种泛化指针,如果一个迭代器指向了容器中的某一成员,那迭代器将可以通过自增自减来遍历容器中的所有成员。迭代器是联系容和算法的媒介,是算法操作容器的接口。在运用算法操作容器的时候,我们常常在不知不觉中已经使用了迭代器。
顺序容器变量的初始化。
方式1:C<type>变量1=变量。 这种方法很少用。
方式2:使用构造函数 C可以为:vecter、list、deque
构造函数 描述
C<type>V1; C保存类型为type的对象,v1为空。
C<type>V2(n) v2 包含n个元素,每个元素初始化为0。
C<type>v3(n,i) v3 包含n个元素,每个元素初始化为i.
C<type>v4(v1); v4是v1的一个副本。实现的是复制的操作。
c<sype>v5(b,e) v5中包含另一个容器变量的迭代器b和e之间的元素。
迭代器:
格式: C<type>::iterator iter:指向容器中元素的指针。
begin()和end()函数。
begin()返回指向容器第一个元素的迭代器。
例:vectot<init>::iterator iter=v.begin();
end();返回指向容器最后一个元素的迭代器。
例:vector<int>::iterator iter=v.end()。
运算:
*iter 引用迭代器指向的元素。
iter++ 指向下一个元素
iter- - 指向上一个元素
iter+n 指向下n个元素(list容器不能使用)
iter-n 指向上n个元素(list容器不能使用)
大小操作:
size()返回容器中的元素个数
empty()判断容器是否为空
访问操作
back()返回容器中最后一个元素。
front()返回容器中第一个元素。
[n]返回容器中第n个元素(list容器不能使用)
交换操作
变量.swap(c<type>b);交换容器变量a和b.
#include <iostream>
#include <vector>
using namespace std;
int main(int argc,const char * argv[])
{
vector<int>v1;//容器
cout<<v1.size()<<endl;//容器个数。
vector<int>v2(10);
for (int i=0; i<v2.size(); i++)
{
cout<<v2[i]<<' ';
}
cout<<endl;
vector<int>v3(10,1);//10个1。
for (int i=0; i<v3.size(); i++)
{
cout<<v3[i]<<' ';
}
cout<<endl;
vector<int> v4(v3);//复制。
for (int i=0; i<v4.size(); i++)
{
cout<<v4[i]<< ' ';
}
cout<<endl;
vector<int>::iterator iter=v3.begin();
vector<int>v5(iter ,iter+3);//第一个到第三个元素。
for (int i=0;i<v5.size(); i++)
{
cout<<v5[i]<<' ';
}
cout<<endl;
//添加
vector<int> e;
e.push_back(10);//尾部加一个元素。
e.push_back(20);
vector<int>::iterator iter1=e.begin();
e.insert(iter1+1,30);//在迭代器指向的元素前添加值元素。
for (int i=0; i<e.size(); i++)
{
cout<<e[i]<<endl;
}
vector<int>v8;
for (int i=0; i<10; i++)
{
v8.push_back((i+1)*10);
}
for (int i=0; i<v8.size(); i++)
{
cout<<v8[i]<<' ' ;
}
cout<<endl;
iter= v8.begin();
v8.erase(iter,iter+2);//删除指定的元素。
for (int i=0; i<v8.size(); i++)
{
cout<<v8[i]<<' ';
}
cout<<endl;
v8.pop_back();//删除最后一个元素。
for (int i=0; i<v8.size(); i++)
{
cout<<v8[i]<<' ';
}
cout<<endl;
v8.clear();//删除全部元素。
cout<<v8.size()<<endl;
return 0;
}
交换
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
vector<int>v1;
v1.push_back(10);
v1.push_back(20);
for (int i=0; i<v1.size(); i++)
{
cout<<v1[i]<<' ';
}
cout<<endl;
vector<int>v2;
v2.push_back(30);
v2.push_back(40);
v2.push_back(50);
v1.swap(v2);//交换。
for (int i=0; i<v1.size(); i++)
{
cout<<v1[i]<<' ';
}
cout<<endl;