首页 > 编程语言 >C++ STL容器

C++ STL容器

时间:2023-02-27 19:33:39浏览次数:33  
标签:容器 begin lst1 map STL 元素 C++ vector

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)://返回迭代器,判断是否存在。

标签:容器,begin,lst1,map,STL,元素,C++,vector
From: https://www.cnblogs.com/ysfxt/p/17161588.html

相关文章

  • 如何选择Python与C++之间的胶水:Boost.Python,Cython,pybind11,SWIG
    Python作为一门胶水语言,它与C/C++之间的兼容性(Interoperability)我认为是它相比其他动态语言脱颖而出的最大原因。Python原生支持的是与C语言的接口,Python的发行版自带有Pyt......
  • C++ 截图、操作鼠标移动左键单击、操作键盘、ocr识图、获取system函数的结果
    ocr识别是使用tesseract来搞得,因为tesseract的编译太麻烦了,就通过system直接命令行识别了在通过读取命令行界面的字符获取结果的。//键盘和对应按键值的映射std::map<w......
  • stl算法汇总
          ......
  • c++中内联函数和宏函数的区别
    一.区别:是不是函数:宏定义不是函数,但是使用起来像函数。预处理器用复制宏代码的方式代替函数的调用,省去了函数压栈退栈过程,提高了效率;内联函数本质上是一个函数,内联......
  • c++函数指针
    一.定义介绍1.1定义如果在程序中定义了一个函数,那么在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址。而且函数名表示的就是这......
  • ACP云原生容器题目整理 -- 阿里云镜像服务ACR
    ACR企业版支持托管的HelmChart支持v2和v3版本使用个人版实例推送拉取镜像的前提条件:安装Docker,注册阿里云账号创建镜像仓库时,在设置源代码对话框中,将代码源设为:Github,......
  • SB410日标容器板、SB410执行标准、SB410化学成分
    一、SB410钢板简介:SB410是日标锅炉压力容器钢板,生产厚度8mm-150mm之间,执行标准JISG3103,探伤需符合国标一级探伤,“SB”表示日标容器板“410”表示:屈服强度数值为420MPa。二......
  • 力扣-算法C++-简单题
    1、给定一个整数数组nums 和一个整数目标值target,请你在该数组中找出和为目标值target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答......
  • Java STL汇总
    1)STL(StandardTemplateLibrary),即标准模板库,是一个高效的C++程序库,包含了诸多常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软......
  • C++模板
    写在前面现在我们来开启C++不同于C语言的地方.大家都知道C语言没有标准的数据结构相关的库,而C++存在STL,原因就是C++支持泛型编程,这是我们今天需要知道重点,先来简单的认......