C++ vector/ queue/map 操作

文章目录

    • 1. vector:动态数组/向量的
      • 数据结构的属性
      • vector 常用的方法
    • 2. queue:双端队列, 支持vector不支持的push_front()
    • 3. list:链表,双向链表,只能顺序访问,不能使用[]进行随机访问
    • 4. map: 映射,map中的key和value是一个pair结构中的两个分量
    • pair/make_pair 将数据合成一组
    • 一些细微区别
      • push_back-->emplace_back 进一步优化的空间

1. vector:动态数组/向量的

数据结构的属性

Vectors 包含着一系列连续存储的元素,其行为和数组类似。
访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,
而查找特定值的元素所处的位置或是在Vector中插入元素则是线性时间复杂度。

vector 常用的方法

  • vector begin()/end() 返回一个当前vector容器中起始元素/最后一个元素的迭代器
  • vector front()/back() 返回一个当前vector容器中起始元素/最后一个元素的引用
  • push_back() 在Vector最后添加一个元素
  • pop_back() 移除最后一个元素
  • size() 返回Vector元素数量的大小
  • empty() 判断Vector是否为空(返回true时为空)

2. queue:双端队列, 支持vector不支持的push_front()

3. list:链表,双向链表,只能顺序访问,不能使用[]进行随机访问

4. map: 映射,map中的key和value是一个pair结构中的两个分量

pair/make_pair 将数据合成一组

vector可以是将同一种类型的数据,连续存储,
也可以使用pair,将不同类型数据进行组合,然后一起存储

vector>> cnt_pts_id;
cnt_pts_id.push_back(make_pair(track_cnt[i], make_pair(forw_pts[i], ids[i])));

queue>  accBuf;
accBuf.push(make_pair(t, linearAcceleration));

一些细微区别

push_back–>emplace_back 进一步优化的空间

通常使用push_back()向容器中加入一个右值元素(临时对象)的时候,首先会调用构造函数构造这个临时对象,然后需要调用拷贝构造函数将这个临时对象放入容器中。原来的临时变量释放。这样造成的问题是临时变量申请的资源就浪费。
 
使用emplace_back,可以进一步优化空间,在容器尾部添加一个元素,这个元素原地构造,不需要触发拷贝构造和转移构造。而且调用形式更加简洁,直接根据参数初始化临时对象的成员。

你可能感兴趣的:(C,Plus,Plus)