C++的vector用法详解!!!强大索引,一目了然,分分钟搞定!!!

新手创作中,欢迎在评论区指教~
如果该文章对你确有帮助,希望可以点个赞,让我元气满满~
持续更新中,点击关注不迷路~
话不多说,直接上代码!!!

1 初始化

1.1 一维

#include <vector> // 头文件
// 1.指定大小不带初值的初始化
vector<int> vec(9); // 大小为9,初始值不确定(对于int类型,一般默认为0)
// 2.直观的初始化
vector<int> vec{1,2,3,4,5,6,7,8};
// 3.批量初始化
int size=10;
vector<int> vec(size,1); // 容器vec大小为10,初始值为1
// 4.通过其他容器初始化
// 假设容器b为{1,2,3,4,5}
vector<int> vec(b); // 整个拷贝
vector<int> vec(b.begin()+n,b.begin()+m); // 局部拷贝,从b.begin()+n开始,赋值(m-n)个元素
// 5.通过数组初始化
// 注意不能直接拷贝整个数组!
int b[7]={6,5,4,3,2,1,0};
vector<int> vec(b+n,b+m); // 与上类似

1.2 二维

// vec大小为4,子数组大小为5 (4行5列)
// 指定了大小,默认值初始化为0,不要使用push_back()添加元素,采用vec[i][j]=num直接赋值
vector<vector<int>> vec(4,vector<int>(5));

2 常用方法

2.1 增

2.1.1 assign()

// 假设容器b为{4,3,2,1}
vec.assign(b.begin()+n,b.begin()+m); // 从b.begin()+n开始,拷贝(m-n)个元素
vec.assign(10,1); // 容器大小为10,初值为1

2.1.2 push_back()

// 假设容器vec为{4,3,2,1}
vec.push_back(0); // 像容器vec最后插入元素0,vec变成{4,3,2,1,0}

2.1.3 insert()

// 假设容器vec为{4,3,2,1}
vec.insert(vec.begin()+1,-9); // 在索引1的位置插入一个元素,其值为-9
// 容器vec变为{4,-9,3,2,1}

//-----------------------------------------------------------------

// 假设容器vec2为{4,3,2,1}
vec2.insert(vec2.begin()+1,2,5); // 在索引1的位置插入2个元素,其值为5
// 容器vec2变为{4,5,5,3,2,1}

//-----------------------------------------------------------------

// 假设容器vec3为{4,3,2,1},容器b为{6,7,8,9}
vec3.insert(vec3.begin()+1,b.begin()+1,b.begin()+3);
// 容器vec3变为{4,7,8,3,2,1}

2.2 删

2.2.1 pop_back()

// 假设容器vec为{4,3,2,1}
vec.pop_back(); // 删除vec的最后一个元素1

2.2.2 erase()

// 假设容器vec为{4,3,2,1}
vec.erase(vec.begin()+1); // 删除索引为1的元素,vec变为{4,2,1}

//-------------------------------------------------------------------------

// 假设容器vec2为{4,3,2,1}
vec2.erase(vec2.begin()+n,vec2.begin()+m); // 从第n个元素开始,删除(m-n)个元素

2.2.3 clear()

// 假设容器vec为{4,3,2,1}
vec.clear(); //清空vec中的所有元素

2.3 改

2.3.1 resize()

// 假设容器vec为{4,3,2,1}
vec.resize(10); // 将容器vec大小调至10,会补充元素,值随机(一般为0)
// 假设容器vec2为{4,3,2,1}
vec2.resize(3); // 将容器vec2大小调至3,会删除元素,值随机(一般从末尾删除)
// 假设容器vec3为{4,3,2,1}
vec3.resize(10,2); // 将容器vec3大小调至10,补充元素,值指定为2

2.3.2

// 假设容器vec为{4,3,2,1}
// 假设容器vec2为{5,6,7,8,9}
vec.swap(vec2); // vec变为{5,6,7,8,9},vec2变为{4,3,2,1}

2.3.3 reverse()

// 假设容器vec为{4,3,2,1}
reverse(vec.begin(),vec.end()); // vec变为{1,2,3,4}

2.4 查

2.4.1 find()

// 假设容器vec为{4,3,4,2,1,0}

// 返回元素ele在vec中的第一个索引,ele为4时返回index=0
// 若未找到指定的元素,返回下标为vec.size()
int index=find(vec.begin(),vec.end(),ele)-vec.begin();

// 返回元素ele在vec中的第一个索引(从右往左看,索引也是从右开始),ele为4时返回index=3
// 若未找到指定的元素,返回下标为vec.size()
int index2=find(vec.rbegin(),vec.rend(),ele)-vec.rbegin();

2.4.2 front()和back()

// 假设容器vec为{4,3,2,1}
vec.front(); //返回第一个元素4
vec.back(); // 返回最后一个元素1

2.4.3 empty()

// 假设容器vec为{4,3,2,1}
vec.empty(); //判断vec是否为空,空则返回true;不空则返回false

2.4.4 size()

// 假设容器vec为{4,3,2,1,0}
vec.size() // 返回容器大小,值为5

3 其他方法

3.1 排序

vector<int> vec{7,5,9,2,4,1};
sort(vec.begin(),vec.end()); // 正常升序排序
// vec是二维数组[[1,2],[4,6],[3,5]]
sort(vec.begin(),vec.end(),cmp); // 自定义排序,cmp是自定义函数
bool static cmp(vector<int>& a,vector<int>& b) { // 按子数组右区间升序排序
    return a[1]<b[1];
}

3.2 求和

vector<int> num{0,1,2,3};
accumulate(num.begin(),num.end(),0); // 6 (第三个参数是累加的初值)

3.3 遍历

// 1.通过迭代器遍历
// 假设容器vec为{4,3,2,1}
vector<int>::iterator iter;
for(iter=vec.begin();iter!=vec.end();iter++) {
    cout<<*iter<<endl; // 注意是 *iter!
}
// 2.通过索引遍历
// 假设容器vec为{4,3,2,1}
for(int i=0;i<vec.size();i++) {
    cout<<vec[i]<<endl;
}
// 3.通过auto遍历
// 假设容器vec为{4,3,2,1}
for(auto ele:vec) {
    cout<<ele<<endl;
}

3.4 判断指定元素是否存在

// 假设vec为{4,3,2,1}
vector<int>::iterator iter=find(vec.begin(),vec.end(),num);
if(iter!=vec.end()) cout<<*iter<<endl; // *iter=num
else cout<<"未找到!"<<endl;
  • 5
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值