推荐书籍
《STL源码剖析》
《STL基础及应用》
《STL中文版》配的是VC6.0版本的STL PJ版本
《C++标准程序库》
STL特性
- 通用性、效率
- PJ版本(vc6.0中的)、SGI版本
- 模板、 数据结<容器> 、算法、迭代器(容器和算法之间的粘合剂)
- 空间配置器 容器 算法 迭代器 容器适配器 仿函数,容器主要分为三大类:顺序、关联、容器适配器
- 萃取的技法是关键(了解STL 的钥匙)
初学者认为stl就是vecto、rlist、 stack,其实不然容器只是其中的一部分。
vector初始化的方法:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int ar[10] = {1,2,3,4,5,6,7,8,9,10};
vector<int> v1;
vector<int> v2(10,2);
vector<int> v3(ar, ar+10);
for(int i=0; i<v3.size(); ++i)
{
cout<<v3[i]<<" ";
}
cout<<endl;
//用迭代器访问不同的容器,其方法是一样的,但是底层是不一样的
vector<int>::iterator it = v3.begin();
while(it != v3.end())
{
cout<<*it<<" ";
++it;
}
cout<<endl;
return 0;
}
vector扩容的测试代码:
void main()
{
vector<int> v1;
cout<<"capacity = "<<v1.capacity()<<endl;
v1.push_back(1);
cout<<"capacity = "<<v1.capacity()<<endl;
v1.push_back(2);
cout<<"capacity = "<<v1.capacity()<<endl;
v1.push_back(3);
cout<<"capacity = "<<v1.capacity()<<endl;
v1.push_back(4);
cout<<"capacity = "<<v1.capacity()<<endl;
v1.push_back(5);
cout<<"capacity = "<<v1.capacity()<<endl;
}
迭代器失效的情况:
void main()
{
int ar[10] = {1,2,3,4,5,6,7,8,9,10};
vector<int> v1(ar, ar+10);
//初始化的时候,容量是定的10个。用push_back的话容量不是10个
cout<<"capacity = "<<v1.capacity()<<endl;
vector<int>::iterator pos = v1.begin();//返回的是个迭代器(对象)
//end()返回的是最后一个元素的下一个元素,为了能够访问到最后一个元素,前闭后开的哲学
cout<<"*pos = "<<*pos<<endl;
v1.push_back(100);
//如果底层空间重新分配的话,pos迭代器就会失效
pos = v1.begin();//重新给pos赋值,否则迭代器会失效
cout<<"*pos = "<<*pos<<endl;
}
list的用法:
void main()
{
list<int> mylist;
mylist.push_back(1);
mylist.push_front(2);
mylist.pop_back();
list<int>::iterator it = mylist.begin();
cout<<"Head-->";
while(it != mylist.end())
{
cout<<*it<<"-->";
++it;
}
cout<<"Over."<<endl;
}
容器有很多