STL:标准模板库
STL: Standard Template Lib
1, 向量(vector):对数组的封装
特点:读取能在常数时间完成——>无论存了10个数组还是一万个数组都能在在固定时间找出来,
初始化方法:
例子:
向量初始化之后,会有一些配套使用方法。
数组的遍历方法
1、看清是k<vec.size(),输出是vec[i]。
2、用迭代器 iterator
citer 是迭代器变量属性是vector<string>::iterator,先把数组的第一个元素begin()给citer
list:链表模ban
ABCDE是数据部分,另一个是指针部分,指针部分用于将各个节点串连起来A->B->C->D->E
链表可以有多个节点、没有节点的是空链表
也可以是双向链表从头指向尾、或从尾指向头
特点:数据插入速度快。只需在要插入的前一个的指针域指向插入的数据、在插入的指针域指向要插入的后一个就可以,这要比向量简单很多
list<int> list1;
list1.push_back (4);
list1.push_back (7);
list1.push_back (10);
错的遍历:
for (int i=0 ; i< list1.size (); it++ )
{
cout << *list1[1]<< endl; //这样遍历时错误的,因为 *list1[1]来访问每个元素、只能用迭代器
}
对的遍历:
list<int>::iterator itor = list1.begin ();
for ( ; itor != list1.end (); itor++ )
{
cout << *itor << endl;
}
3、映射 map
可以通过键找到对应的值,一对一对存在
map<string, string> m; 只是先定义一个map,下面在单独定义对。
pair<string, string> p1("S","Shang Hai");
pair<string, string> p2("B","Bei Jing");
pair<string, string> p3("G","Guang Zhou");
m.insert(p1);
m.insert(p2);
m.insert(p3);
map<string, string>::iterator itor;
for(itor=m.begin();itor!=m.end();itor++) itor要在m的第一个元素,当在最后元素的后面时结束
{cout<<itor->first<<endl;
cout<<itor->second<<endl;}
return 0;
使用方法:10对应的就是上海,20对应的就是北京,当然10也可以定义成字符串形式
这里m.push_back (p1)不能用。要用m.insert(p1)
遍历也用迭代器
map<int, string>::iterator itor = m.begin ();
for ( ; itor != m.end (); itor++ )
{
cout << itor->first << endl;
cout << itor->second << endl; //不能直接写成*itor,因为映射含有一对、要分别将键、值指出
}