STL
标准模板库;
将算法从特定的数据结构中抽象出来;
C++的模板为泛型程序设计奠定了关键的基础;
STL是泛型程序设计的一个范例,由一些可适应不同需求的集合类以及在这些数据集合上操作的算法构成:
容器:管理某类对象的集合;
迭代器:对对象集合上进行遍历;
算法:处理集合内的元素
函数对象;
向量(Vector)使用
#include
#include
using namespace std;
vector num;//STL中的vector容器
int element;
//从标准输入设备读入整数,
//直到输入的是非整型数据为止
while(cin>>element)
num.push_back(element);
//STL中的排序算法
sort(num.begin(),num.end());
#include
using namespace std;
#include
void print_vector(const vector& coll)
{
cout << "coll.capacity() "<<coll.capacity() << endl;//容量
cout << "coll.size() " <<coll.size() << endl;
}
int main()
{
vector coll;//动态数组
print_vector(coll);
for(int i = 0; i< 10; i++)
{
coll.push_back(i);//添加元素
}
cout << coll[9] << endl;
print_vector(coll);
return 0;
}
迭代器是面向对象版本的指针
1、指针可以志向内存中的一个地址;
2、迭代器可以指向容器中的一个位置,用来遍历STL容器中的全部或者部分元素。
STL的每一个容器类模板中,都定义了一组对应的迭代器类
获得迭代器:
所有容器都提供获得迭代器的函数
所有容器都提供两种迭代器:
1、Container::iterator以“读写”模式遍历元素;
2、Container::const_iterator以“只读”模式遍历元素;
Vector的迭代器 vector::iterator iter;
这条语句定义了一个名为iter的遍历,它的数据类型是由vector定义的iterator类型。
Vector的begin和end操作
如果容器中有元素的话,由begin返回的迭代器指向第一个元素:
vector::iterator iter = ivec.begin();
由end操作返回的迭代器指向vector的“末端元素的下一个”。通常称为超出末端迭代器。
#include
using namespace std;
#include
void show_array(const vector& array)
{
vector::const_iterator iter;
cout << “array[”;
for(iter = array.begin(); iter != array.end(); ++iter)
{
cout << *iter << “,”;
}
cout << “]” << endl;
}
int main()
{
vector array;
vector<int>::iterator iter; //迭代器,vector内部类
vector<int>::const_iterator citer;
array.push_back(42);
array.push_back(1);
array.push_back(100);
array.pop_back();
iter = array.begin();
cout<< *iter <<endl;
*iter = 109;
citer = array.begin();
cout << *citer << endl;
show_array(array);
return 0;
}
vector迭代器的自增和解引用运算
for(vector::iterator iter = ivec.begin();iter!=iver.end(); ++iter)
*iter = 0; //将iterator指向的元素设为0