C++顺序容器

顺序容器类型

vector
list
deque
string

概述

vector、string 支持随机访问,速度快,在尾部插入/删除速度快
list 双向链表,只支持双向顺序访问
deque 双向队列,支持快速随机访问,在头尾插入/删除速度很快

选择容器

一般情况下选择vector
如果元素很小,不要使用list
如果要求随机访问,应使用vector或者deque
如果要求中间插入元素,应使用list
如果需要中间插入之后随机访问,先用list再拷贝到vector

顺序容器通用操作(C11)

//类型别名
iterator                    //此容器的迭代器类型
const_iterator              //不能修改元素的迭代器类型
size_type                   //无符号整数
difference_type             //带符号整数,保存两个迭代器之间的距离
reference                   //元素的左值类型;与value_type&含义相同
const_reference             //即const value_type&

//构造函数
C c;                        //默认构造函数
C c1(c2);                   //构造c2的拷贝
C c(b, e);                  //拷贝迭代器b和e之间的元素, 不包含e指向的元素,即[b, e)
C c{a, b, c...};            //列表初始化

//赋值与swap
c1 = c2;                    //将c1中的元素替换成c2的元素
c1 = {a, b, c...};          //将c1中的元素替换成列表中的元素
a.swap(b);                  //交换a和b的元素
swap(a, b);

//大小
c.size()                    //c中元素的数目
c.max_size()                //c可保存的最大元素数目
c.empty()                   //判断是否没有元素

//添加元素
c.push_back(t)              //在尾部插入元素,返回void
c.emplace(args)             //使用元素构造函数构造元素,返回void
c.insert(p, t)              //在p之前插入元素,返回指向新元素的迭代器
c.emplace(p, args)          //同上
c.insert(p, n, t)           //在迭代器p之前插入n个值为t的元素,返回指向新插入的第一个元素的迭代器,若n是0,返回p
c.insert(p, b, e)           //将b和e之间的元素插入到p之前,返回值同上
c.insert(p, il)             //il是元素值列表{a, b, c...},返回值同上

//访问元素
c.back()                    //返回尾元素的引用
c.front()                   //首元素
c[n]                        //返回第n个元素的引用
c.at(n)                     //同上

//删除元素
c.pop_back()                //删除尾元素,返回void
c.pop_front()               //
c.erase(p)                  //删除迭代器p指向的元素,返回p后面的元素的迭代器
c.erase(b, e)               //删除[b, e),返回e
c.clear()                   //删除所有元素,返回void

//改变容器大小
c.resize(n)                 //若n < c.size(),则删除后面元素,否则,新元素进行初始化
c.resize(n, t)              //任何新添加的元素用t初始化

//关系运算符
==, !=
<, <= , >, >=

//获取迭代器
c.begin(), c.end()
c.cbegin(), c.cend()

//反向容器的额外成员
reverse_iterator
const_reverse_iterator
c.rbegin(), c.rend()
c.crbegin(), c.crend()

使用顺序容器

#include <vector>
using std::vector;

class Person{
    Person(){
        name = "";
        age = -1;
    }
    Person(const std::string name_, int age_):
        name(name_), age(age_) {}
    string name;
    int age;
};
//容器定义和初始化
vector<int> vi1;                    //默认构造函数
vector<vector<int>> vvi;
vector<int> vi2 = {1, 2, 3};        //或者vector<int> vi2{1, 2, 3};
vector<int> vi3(vi2);
vector<int> vi4(vi3.begin(), vi3.end());
vector<int> vi5(10, -1);            //10个值为-1的元素
//使用迭代器操作容器元素
vector<int>::iterator b = vi2.begin(), e = vi2.end();
for(vector<int>::iterator i = b; i != e; i++){
    (*i)++;
    std::cout << *i;
}
//赋值和swap, 注意赋值操作会使容器内部的迭代器、引用、指针失效
vi1 = vi2;
vi1 = {1, 2, 3};
swap(vi1, vi2);                     //swap通常比从vi2想vi1拷贝元素快得多
vi1.swap(vi2);
vi3.assign(vi1.cbegin(), vi1.cend());
vi3.assign(10, -1);                 //10个-1
//容器大小和比较
vi1.empty();
vi1.size();
vi1.max_size();
vi1 == vi2
vi1 < vi2
//插入
vector<Person> p("xxx", 20);
p.push_back(Person("xxx", 21));     //在尾部插入元素
p.emplace_back("xxx", 22);          //使用两个参数的构造函数构造元素,注意push_back和
                                    //emplace_back的区别
p.insert(p.begin(), Person("xxx", 23));     //insert(x, y)表示在x之前插入y
p.emplace(p.begin(), "xxx", 24);            //同insert

//其他见上面通用操作

转载于:https://www.cnblogs.com/zjpeng1234/p/5954226.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值