1、容器的概念
容器就是一些特定类型对象的集合。
2、容器的分类
容器主要分为顺序容器和关联容器。顺序容器为程序员提供了控制元素存储和访问顺序的能力,这种顺序不依赖于元素的值,而与元素加入容器时的位置相对应。关联容器则是根据关键字的值来存储元素。
3、顺序容器
重点讲述使用最多的vector容器。
vector 是一个类模板(class template),要包含相应的头文件#include<vector>。vector属于std命名域,使用全局命名域方式using namespace std;
(1)vector的初始化:
(2)创建vector对象: vector是模板而非类型,由vector生成的类型必须包含vector中元素的类型。如:vector<int> ivec1; //ivec1保存int类型的对象
(3)vector中的操作:
添加元素
vec.push_back(a) //在数组的最后添加一个数据a
vec.insert(pos,elem) //在pos位置插入一个elem拷贝,传回新数据位置
vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;
删除元素
vec.pop_back() //删除数组的最后一个数据
vec.erase(pos) //删除pos位置的数据,传回下一个数据的位置
vec.erase(vec.begin()+2);删除第3个元素
vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始
vec.clear() //删除vec中所有元素,返回void
vec向量的大小
vec.size() //返回容器中实际数据的个数。
vec.empty() //判断vector是否为空,里面有数据返回false,否则返回true
获取迭代器
vec.begin() //返回vec的首元素
vec.end() //返回尾元素之后元素的位置,即最后一个单元+1的指针
vec.rbegin() //将vector反转后的开始指针返回(其实就是原来的end()-1)
vec.rend() //将vector反转构的结束指针返回(其实就是原来的begin-1)
访问vector中的数据
第一种方式 vec.at(index) //函数和[]函数使用可以说是一模一样. 都是为了访问对应index中存储的数据, 如果index大于vector的size. 两者都是抛出out_of_range的exception.
第二种方式 vector::operator[]
operator[]主要是为了与C语言进行兼容。它可以像C语言数组一样操作,由于operator[]容易造成一些错误,所有我们很少用它
vector其他成员函数
vec.assign(beg,end) //将[beg; end)区间中的数据赋值给c。
vec.assign(n,elem) //将n个elem的拷贝赋值给c。
vec.back() //传回最后一个数据,不检查这个数据是否存在。
vec.front() //传回地一个数据。
vec.swap(b) //交换vec和b中元素
swap(a,b) //和vec.swap(b)一样
4、关联容器
重点讲述关联容器map。map是c++的一个标准容器,它提供了很好的一对一的关系。map容器的元素是一些关键字——值(key-value)对,key和value可以是你想要的任意类型,关键字起到了索引的作用,值则表示与索引相关的联的数据。换句话说,就是通过key可以找到相应的value。
(1)创建map:
map <key_type,value_type>tempMap;
(2)map初始化:
map tempMap{
{key1,value1},
{key2,value2},
......};
举例: