C++STL中vector(可变大小数组)用法总结

    标准库类型vector表示某种类型对象的集合,集合中每个对象都有一个与之对应的索引,用以访问对象。要想使用vector,必须包含头文件vector,并且需要声明using std::vector

/*--------------------创建和初始化vector对象--------------------*/
/*创建一个包含T类型元素的空vector*/
vector<T> v1;

/*用v1来创建v2,v2包含v1中所有元素的拷贝*/
vector<T> v2(v1);

/*等价于vector<T> v2(v1);*/
vector<T> v2 = v1;

/*v3包含n个T类型的元素,每个元素的值都是val*/
vector<T> v3(n, val);

/*v4包含n个执行值初始化的元素*/
vector<T> v4(n);

/*利用初始值列表构造vector,每个元素被赋予相应的初始值*/
vector<T> v5{a, b, c...};

/*等价于v5{a, b, c...}*/
vector<T> v5 = {a, b, c...};

/*---------------------------迭代器---------------------------*/

/*返回指向vec的第一个元素和最后一个元素之后的迭代器*/
vec.begin(), vec.end();

/*返回指向vec的第一个元素和最后一个元素之后的const迭代器(只能读元素,不能写元素)*/
vec.cbegin(), vec.cend();

/*返回指向vec的最后一个元素和第一个元素之前的迭代器*/
vec.rbegin(), vec.rend();

/*返回指向vec的最后一个元素和第一个元素之前的const迭代器*/
vec.crbegin(), vec.crend(); 

/*--------------------------容量相关--------------------------*/
/*vec中元素的数目*/
vec.size();

/*vec可以保存的最大元素数量*/
vec.max_size();

/*vec为空,返回true;否则返回false*/
vec.empty();

/*在不重新分配空间的情况下,vec可以保存多少元素*/
vec.capacity();

/*分配至少能容纳n个元素的内存空间*/
vec.reserve(n);

/*请求将capacity()减少为和size()一样的大小,但是调用该函数也不保证一定会退回内存空间*/
vec.shrink_to_fit();

/*--------------------------交换和赋值--------------------------*/


/*交换vec1和vec2中的元素。vec1和vec2必须具有相同的类型*/
swap(vec1, vec2);

/*同swap(vec1, vec2)。注意swap并未对任何元素进行拷贝、插入或删除操作,它只交换两个vector内部数据结构*/
vec1.swap(vec2);

/*将vec中的元素替换为迭代器b和e所表示范围内的元素。迭代器b和e不能指向vec中的元素*/
vec.assign(b, e);

/*将vec中的元素替换为初始化列表il中的元素*/
vec.assign(il);

/*将vec中的元素替换为n个值为t的元素*/
vec.assign(n, t);

/*注意赋值相关的运算会导致指向左边容器内部的迭代器、引用和指针失效。*/

/*---------------------------添加元素---------------------------*/


/*在vec的尾部添加一个值为t的元素,返回void*/
vec.push_back(t);

/*在vec的尾部添加一个由args创建的元素*/
vec.emplace_back(args);

/*在迭代器p指向的元素之前添加一个值为t的元素,返回指向新添加的元素的迭代器*/
vec.insert(p, t);

/*在迭代器p指向的元素之前添加一个由args创建的元素,返回指向新添加元素的迭代器*/
vec.emplace(p, args);

/*在迭代器p指向的元素之前添加n个值为t的元素。返回指向新添加的第一个元素的迭代器;若n为0,则返回p*/
vec.insert(p, n, t);

/*将迭代器b和e指定范围内的元素插入到迭代器p指向的元素之前,b和e不能指向vec中的元素。返回指向新添加的元素的迭代器;若范围为空,返回p*/
vec.insert(p, b, e);

/*il是一个花括号包围的初始值列表,将初始值列表里的值插入到迭代器p指向的元素之前。返回指向新添加的元素的迭代器;若列表为空,返回p*/
vec.insert(p, il);

/*---------------------------访问元素---------------------------*/


/*返回vec中最后一个元素的引用。如果vec为空,则属于未定义行为*/
vec.back();

/*返回vec中第一个元素的引用。如果vec为空,则属于未定义行为*/
vec.front();

/*返回vec中下标为n的元素的引用,n是一个无符号整数。如果下标越界,则属于未定义行为*/
vec[n];

/*返回vec中下标为n的元素的引用。如果下标越界,则抛出out_of_range异常*/
vec.at(n);

/*---------------------------删除元素---------------------------*/

/*删除vec中的最后一个元素,返回void。若vec为空,则函数行为未定义。*/
vec.pop_back();

/*删除迭代器p所指向的元素,返回指向被删除元素之后元素的迭代器;若p指向最后一个元素,则返回尾后迭代器;若p是尾后迭代器,则函数行为未定义。*/
vec.erase(p);


/*删除迭代器b和e范围内的元素,返回指向最后一个被删除元素之后元素的迭代器;若e本身就是尾后迭代器,则函数也返回尾后迭代器。*/
vec.erase(b, e);

/*删除vec中所有的元素,返回void*/
vec.clear();
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值