STL 标准模板库(standard template library)
容器类(可以存储其他对象的对象),算法(一系列封装好的函数),迭代器(用于
遍历操作的类)
容器可以直接存储对象,也可以存储对象的指针。成熟的程序员喜欢使用间接存储。
容器主要包括两种类型:序列类(一般是线形存储)和关联类(一般是非线性存储)。
一、序列式容器
vector ----- 数组 可变长 不提供 pop_front()删除头元素的函数
list ----- 链表
(1)Vector v[1000]当越界的时候,会出现段错误
使用 vector 需要导入头文件 vector
v.at(1000) 越界的时候,会抛出 out_of_range 的异常,在程序中捕获
v.size() 返回长度,可利用这个循环迭代
v.empty()判断容器是否为空
iterator 迭代器 : 可以做取*操作 *iterator
iter->name <=> (*iter).name
iter++
v.begin() 指向数组的开始
v.end() 指向数组最后一个元素的后面,是一个结束标志
如:对一个 vector 进行迭代输出
vector<int> v1;
v1.push_back(1);//假设添加了很多 int 元素
vector<int>::iterator it; //iterator 是 vector 的一个内部类,要标识出迭代器类型
for( it = v1.begin(); it < v1.end(); it++ )
cout << *it << endl;
v.insert(iter,5); //在 iter 所指的元素前面插入 5
v.insert(iter,5,100); //在 iter 所指的元素前插入 5 个 100
这样的插入操作,会造成原来的 iterator 失效,对起重新赋值,可以保证继续使用
(2)list
使用 list 需要导入头文件 list
不能做 at()
多了 push_front(),pop_front()
iter 不能做加 n 操作
使用于做频繁的插入删除操作
二、关联式容器
(1)map
使用 map 需要导入头文件 map
适合根据键查找值的操作
存储上按照键值排序 ,并且 key 值唯一
map<int,Student> m;
Student s1( 1 ,"lily" );
//创建一个 pair,并存到 map 的第一个位置中,value_type 是 map 的静态函数
m.insert( map<int,Student>::value_type(s.getId(),s1)) ;
Student s2( 4, "licy”);
m.insert( map<int,Student>::value_type(s2.getId(),s)) ;