标准模板库
Sequential Container(顺序容器)
int main() // accessElementByIterator.cpp
{
vector<int> ivec(10, 2); // 创建含10个值为2的元素的vector容器
vector<int>::iterator iter; // 声明迭代器对象
vector<int>::reverse_iterator riter; // 声明迭代器对象
:
// 输出容器中的所有元素
for( iter = ivec.begin(); iter != ivec.end(); iter ++ )
{ cout << *iter << " "; }
// 反向输出容器中的所有元素
for( riter = ivec.rbegin(); riter != ivec.rend(); riter++)
{ cout << *riter << " "; }
:
}
(1) 分配指定数目的元素,并对这些元素进行值初始化:
vector<int> ivec1(10); // ivec1包含10个0值元素
(2) 分配指定数目的元素,并将这些元素初始化为指定值:
vector<int> ivec2(10, 1); // ivec2包含10个值为1的元素
(3) 将vector对象初始化为一段元素的副本:
int ia[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
vector<int> ivec3(ia, ia+10); // ivec3包含10个元素,值分别为0~9
(4) 将一个vector对象初始化为另一个vector对象的副本:
vector<int> ivec4(ivec3); // ivec4包含值为0~9的元素(与ivec3相同)
Associative Container(关联容器)
Pair容器(不是关联容器)
头文件<utility>
Map
map<K, T> m;
K是下标类型,T是数组元素类型
map类中的value_type是pair类型,它的first成员是const类型的,
也就是说,map容器中元素的键不能修改。若需要修改容器中某元
素的键,只能用间接的方式:首先删除该元素,再插入一个新元素,
新元素的键设置为所需要的键。
容器的元素下标可以像内置数组那样是整型,也可以是其他类型(例如,string类型),而且后者更常见,因为这里的下标是作为键(关键字)使用的。
使用下标访问元素时,如果该元素存在,则返回元素中的值(也就是键所对应的值)。如果指定的元素不存在,将会导致在容器中增加一个新元素,
该元素中“键”的取值就是给定的下标值,该元素中的“值”采用值初始化。
S[“sysu”] 默认缺省值为0
由于map里每一个元素是pair,下标是pair.first,值是pair.second
所以cout << (*iter).first << "\t" << (*iter).second << endl;
map容器不提供push_back和push_front操作。
如果欲插入的元素所对应的键已在容器中存在,则insert将不做任何操作。
Map.insert(make_pair(“sysu”, 59));
Multimap
Set
不支持下标操作。
内置二叉排序树(时刻有序)
Set不会出现重复元素
int main()
{
double darr[] = {4.4, 5.6, 2.1, 7.8, 8.8, 9.8, 1.1};
set<double> dset;
dset.insert(1.2); // 向set对象dset中插入元素
dset.insert(3.4);
dset.insert(3.4);
dset.insert(darr, darr + 7);
return 0;
}
dset {1.1, 1.2, 2.1, 3.4, 4.4, 5.6, 7.8, 8.8, 9.8 }
Multiset
内置红黑树时刻有序
Container Adapter(容器适配器)
标准库中定义的容器适配器都是基于顺序容器建立的。
程序员在创建适配器对象时可以选择相应的基础容器类。
1)stack适配器可以建立在vector、list或deque容器上。
2)queue适配器只能建立在list或deque容器上。
3)priority_queue适配器只能建立在vector或list容器上。
如果创建适配器对象时不指定基础容器,则stack和queue默认采用deque实现,而priority_queue则默认采用vector实现。