C++ STL 概述_严丝合缝的合作者们( 三 )

  • multimap:可重复映射 。包含头文件<map>
  • 2.2 容器的通用操作2.2.1 初始化使用容器时包含:
    • 创建容器 。
    • 初始化容器 。初始化时可以指定容器的容量、为容器指定一系列初始值、为容器中的数据指定比较方法……
    初始化序列化容器:
    #include <iostream>#include <vector>#include <algorithm>#include <list>#include <set>using namespace std;//使用结构体作为函数对象int main(int argc, char** argv) {//初始容量为 12 向量容器vector<int> vec(12);cout<<"容器大小:"<<vec.size()<<endl;//初始化长度为 2,且值为 12 、30的向量容器vector<int> vec1 {12,30};cout<<"容器大小:"<<vec1.size()<<endl;//构造整型链表,初始容量 34list<int> lst(34);cout<<"容器大小:"<<lst.size()<<endl;//整型数组int ary1[5]= {1,2,3,4,5};//用数组初始化vector<int> vec2(ary1,ary1+5);cout<<"容器大小:"<<vec2.size()<<endl;//用向量初始化链表list<int> intList(vec.begin(),vec.end());cout<<"容器大小:"<<intList.size()<<endl;//用链表初始化集合set<int> intSet(lst.begin(),lst.end());cout<<"容器大小:"<<intSet.size()<<endl;return 0;}输出结果:
    C++ STL 概述_严丝合缝的合作者们

    文章插图
    初始化map、set容器时 。
    //创建并初始化集合set<int> mySet {1,5,3};//构造 map 容器map<std::string, int> myMap;//构造并初始化std::map<std::string, int>myMap{ {"rose",1},{"jone",2} };//输出for (auto iter = myMap.begin(); iter != myMap.end(); ++iter) {cout << iter->first << " " << iter->second << endl;}输出结果:
    jone 2rose 12.2.2 添加数据一般要求容器组件提供对数据进行常规维护的方法(增、删、改、查……) 。
    STL2类容器提供了insert方法,可以在指定的位置为容器加入新的数据 。
    这里需要注意:STL位置一般用迭代器描述,而不是索引位置 。
    // 初始化向量vector<int> vec {1, 2, 3, 4, 5};//开始迭代器vector<int>::iterator begin=vec.begin();//结束迭代器vector<int>::iterator end=vec.end();cout<<"原向量容器数据"<<endl;for(; begin!=end; begin++) {cout<<*begin<<"\t";}//重置开始位置begin=vec.begin();// 指向容器vec的第三个元素begin =begin + 2;//在位置 3 插入数据vec.insert( begin, 6 );//重置开始和结束位置begin=vec.begin();end=vec.end();cout<<"\n插入数据后:"<<endl;for(; begin!=end; begin++) {cout<<*begin<<"\t";}输出结果:
    C++ STL 概述_严丝合缝的合作者们

    文章插图
    关联式容器的插入数据效果和序列式容插入效果会有不同 。
    • 序列式容器中插入数据后,期望位置和最终结果位置是一样的 。如期望插入在第 3 个数据之后,实际也是插入在第 3 个数据之后 。
    • 关联式容器会自动按进行位置重排,会出现期望位置和最终位置不一样的情况(特别在以红黑树存储数据时,为了保持平衡性,会对数据进行平衡处理) 。

    C++ STL 概述_严丝合缝的合作者们

    文章插图
    STL还为序列式容器提供了push、push_back、push_front方法,此方法只能在容器头或容器尾进行数据添加 。
    // 声明一个向量vector<int> vec(10);// 压入数据vec.push_back(1);vec.push_back( 1 );vec.push_back( 2 );// 声明一个链表list<int> ls(10);// 压入数据ls.push_back( 1 );ls.push_front( 2 );// 声明一个栈,栈只有 push 方法stack<string> st;// 压入数据st.push("A");

    经验总结扩展阅读