C++ STL容器

STL容器

STL容器主要有,动态数组vector,循环双向链表list,双端队列deque,栈stack,

Vector容器

#include <vector>   //头文件
vector<int> a;      //定义了一个int类型的vector容器a
vector<int> b[100]; //定义了一个int类型的vector容器b组
struct rec
{
    ···
};
vector<rec> c;            //定义了一个rec类型的vector容器c
vector<int>::iterator it; //vector的迭代器,与指针类似
a.size()       //返回实际长度(元素个数),O(1)复杂度
a.empty()      //容器为空返回1,否则返回0,O(1)复杂度
a.clear()      //把vector清空
a.begin()      //返回指向第一个元素的迭代器,*a.begin()与a[0]作用相同
a.end()        //越界访问,指向vector尾部,指向第n个元素再往后的边界
a.front()      //返回第一个元素的值,等价于*a.begin和a[0]
a.back()       //返回最后一个元素的值,等价于*--a.end()和a[size()-1]
a.push_back(x) //把元素x插入vector尾部
a.pop_back()   //删除vector中最后一个元素
  1. 迭代器使用与指针类似,可如下遍历整个容器。
 for ( vector<int>::iterator it=a.begin() ; it!=a.end() ; it++ )
 cout<<*iterator<<endl;
  1. 当成数组使用。
for( int i=0;i<a.size();i++) cout<<a[i]<<endl;

List容器

    //1.定义和初始化
    list<int> lst1; //创建空list
    list<int> lst2(3); //创建含有三个元素的list
    list<int> lst3(3,2); //创建含有三个元素为2的list
    list<int> lst4(lst2); //使用lst2初始化lst4
    list<int> lst5(lst2.begin(), lst2.end()); //同lst4
 
    //2.常用操作方法
    lst1.assign(lst2.begin(),lst2.end()); //分配3个值为0的元素
    lst1.push_back(10); //末尾添加值
    lst1.pop_back(); //删除末尾值
    lst1.begin(); //返回首值的迭代器
    lst1.end(); //返回尾值的迭代器
    lst1.clear(); //清空值
    bool isEmpty1 = lst1.empty(); //判断为空
    lst1.erase(lst1.begin(),lst1.end());  //删除元素
    lst1.front(); //返回第一个元素的引用
    lst1.back(); //返回最后一个元素的引用
    lst1.insert(lst1.begin(), 3, 2);  //从指定位置插入个3个值为2的元素
    lst1.rbegin(); //返回第一个元素的前向指针
    lst1.remove(2); //相同的元素全部删除
    lst1.reverse(); //反转
    lst1.size(); //含有元素个数
    lst1.sort(); //排序
    lst1.unique(); //删除相邻重复元素
 
    //3.遍历
    //迭代器法
    for(list<int> :: const_iterator iter = lst1.begin(); iter != lst1.end(); iter++)
    {
       cout<<*iter;
    }

Queue容器

#include <queue>
queue<string> myqueue;
queue<int> myqueue_int;

  • front(): 返回 queue 中第一个元素的引用。
  • back(): 返回 queue 中最后一个元素的引用。
  • push(const T& obj): 在 queue 的尾部添加一个元素的副本。
  • pop(): 删除 queue 中的第一个元素。
  • size(): 返回 queue 中元素的个数。
  • empty(): 如果 queue 中没有元素的话,返回 true

Stack容器

  • top():

    返回一个栈顶元素的引用,类型为 T&。如果栈为空,返回值未定义。

  • push(const T& obj):

    可以将对象副本压入栈顶。这是通过调用底层容器的 push_back() 函数完成的。

  • push(T&& obj):

    以移动对象的方式将对象压入栈顶。这是通过调用底层容器的有右值引用参数的 push_back() 函数完成的。

  • pop():

    弹出栈顶元素。

  • size():

    返回栈中元素的个数。

 #include <iostream>
 #include <stack>          //头文件
 using namespace std;
 stack<string> myStack;      //声明一个栈

Map容器(映射)

map 是一个关联容器,它提供一对一的 hash。

  • 第一个可以称为关键字(key),每个关键字只能在 map 中出现一次

  • 第二个可能称为该关键字的值(value)

     #include <iostream>
     #include <map>
     using namespace std;
     
     map<char, int> mymap1;   //定义方式
     map<string, int> mymap2;
    

看容量

int map.size();//查询map中有多少对元素
bool empty();// 查询map是否为空

插入

    map.insert(make_pair(key,value));
    //或者
    map.insert(pair<char, int>(key, value))
    //或者
    map[key]=value

取值

map<int, string> map;

//如果map中没有关键字2233,使用[]取值会导致插入
//因此,下面语句不会报错,但会使得输出结果结果为空
cout<<map[2233]<<endl;

//但是使用使用at会进行关键字检查,因此下面语句会报错
map.at(2016) = "Bob";

遍历

map<string, string>::iterator it;
for (it = mapSet.begin(); it != mapSet.end(); ++it)
{
    cout << "key" << it->first << endl;
    cout << "value" << it->second << endl;
}

查找

m.count(key)://由于map不包含重复的key,因此m.count(key)取值为0,或者1,表示是否包含。
m.find(key)://返回迭代器,判断是否存在。
posted @   盐酸氟西汀  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示