码迷,mamicode.com
首页 > 编程语言 > 详细

C++Vector的使用_各种花哨用法总结

时间:2020-02-02 14:06:30      阅读:88      评论:0      收藏:0      [点我收藏+]

标签:位置   增加   front   入门   操作   ike   超出   sudo   tco   

vector,向量,有序数列。连续的空间存储,可以使用[ ]操作符,可以快速的访问随机的元素,快速的在末尾插入元素,但是在序列中间随机的插入、删除元素要慢。如果空间不够时,有一个重新分配更大空间的过程。

入门使用

#include<vector>
vector<int> vec = {1,2,3};
vec.push_back(4);
vec.push_back(5);
for(int i=0;i<vec.size();++i) 
    cout<<vec[i];

常用方法一览

    vec.push_back(x);//在数组的最后添加一个元素 x 。
    vec.pop_back();//无参,去掉数组的最后一个数据。
    vec.begin();//无参,返回数组头的迭代器。
    vec.end();//无参,返回数组的最后一个单元+1的迭代器。
    vec.clear();//无参,清空当前的vector。
    vec.empty();//无参,判断vector是否为空。
    vec.size();//无参,返回当前使用数据的大小。
    vec.capacity;//无参,返回当前vector分配的大小。
    vec.max_size();//无参,返回vector最大可以是多大。
    vec.at(p);//返回数字 p 位置的数据。比 [ ] 操作符安全,有超出范围检查,超出范围可以抛异常。
    int a = vec.front();//无参,返回数组头的引用。对 a 的修改不会影响vector的内容。
    int &a = vec.front();//无参,返回数组头的引用。对 a 的修改同时会改变vector对应的元素^1^。
    int b = vec.back();//无参,返回数组的最后单元的引用。同front()。
    vec.erase(iterator position);//删除迭代器指向的元素,容器大小改变,已有迭代器可能实效。
    vec.erase(iterator first,iterator last);//删除[first,last)中元素。
    vec.swap(vec2);//与另一个vector交换数据。

进阶使用

以vector vec,vec2;为例,iter通指vector::iterator。

创建与初始化

vector<int> vec;//创建一个空vector。
vector<int> vec = {1,2,3};//列表初始化为{1,2,3}。对于vector<int>类型的函数可以直接用{1,2,3}。
vector<int> vec(int n);//创建一个大小为 n 的vector。
vector<int> vec(int n,int t);//创建vector,元素个数为n,值均为t。
vector<int> vec(vector&);//复制另一个vector。
vector<int> vec(begin,end);//复制[begin,end)区间内另一个数组的元素到vector中。begin、end都是迭代器。尚且不明确能从哪些容器中进行复制。
vector<vector<int>> vec = {{1,2,3},{4,5,6},{7,8,9}};//二维数组。

添加

    vec.insert(iter,x);//迭代器iter指向元素前增加一个元素 x 。
    vec.insert(iter,n,x);//迭代器指向元素前增加 n 个相同元素 x 。
    vec.insert(iter,iter_first,iter_first);//迭代器指向元素前插入另一个相同类型向量的[iter_first,iter_first)间的数据。

遍历

for(int i=0;i<vec.size();++i) cout<<vec[i];
// 迭代器遍历,迭代器看作指针使用。
for(vector<int>::iterator iter = vec.begin();iter!=vec.end();++iter)
    vec2.push_back(*iter);
// auto代替迭代器,C++11标准。
for(auto iter = vec.begin();iter!=vec.end();++iter)
    vec2.push_back(*iter);

拷贝vector

    vector<int> vec2(vec);//初始化时拷贝。
    vec.assign(vec2.begin(),vec2.end());//利用assign函数^2^拷贝。
    vec.assign(n,x);//将vector替换成 n 个元素 x ,之前内容清除。
    vec.insert(vec.end(),vec2.begin(),vec2.end());//用insert()函数向vec末尾提添加vec2。
    vec.swap(vec2);//交换两个vector。

assign()函数

删除

其他

关于vector的使用可以用这些力扣题作为进阶练习:
| 加一 |有效的数独 | 旋转图像 |



[^1]: 参考(blog.csdn.net/sinat_42483341/article/details/87465982)
[^2]: 参考baike.baidu.com/item/assign()/9716433?fr=aladdin

C++Vector的使用_各种花哨用法总结

标签:位置   增加   front   入门   操作   ike   超出   sudo   tco   

原文地址:https://www.cnblogs.com/foxer-z/p/12245218.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!