C++Vector常用方法

575 阅读1分钟

启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第22天,点击查看活动详情

之前已经聊完了vector的定义和实例化,有种万事俱备只欠东风的感觉,那么接下来少不了聊一聊vector的常用方法。

循环

既然想要使用vector容器,那么就得能够展示vector的数据元素,我有个朋友(嘿嘿嘿)尝试直接输出好像报错了:

#include <vector>
#include <iostream>
using namespace std;
​
int main(){
   
   vector<int> vec05(4,10);
​
   cout << vec05 << endl;
​
   return 0;
}

报错:

.....
main.cpp:9:12: note:   cannot convert ‘vec05’ (type ‘std::vector<int>’) to type ‘const unsigned char*’
    cout << vec05 << endl;

很显然,是因为vec05的格式和cout需求的不一样,所以就得解开容器再看,再变成过程当中,解开容器最方便的方法就是循环遍历了,所以,我们需要先聊聊c++的循环:

c++提供了for循环机制,格式如下:

for(声明变量;遍历判断;变量运算){
    指向的语句块
}

我们看一个简单的案例

#include <iostream>
#include <string>
using namespace std;
​
int main(){
   
   string iter_str = "helloword"; //要被展开的字符串
   int str_size = iter_str.size(); //获取字符串的长度,来判断字符串到底需要循环几次
   for(int i = 0; i < str_size; i++){
      cout << iter_str[i] << endl;
   }
   return 0;
}

这里注意:流程控制我们后期还会在聊,这里只是为了满足遍历。

这里使用字符串做的案例,vector的方法上由好多和字符串类似的,那么我们就可以接着研究了。

常用的方法

push_back

这个方法在vector当中,需要详细的聊聊,因为vector是一个具有弹性的容器,一般来说开发者在设置之处实际上是不知道到底有多少元素的。所以常见的vector开发思路是,先声明一个空的vector对象,然后往里面添加元素,这个时候就用到了push_back方法,这个方法就是把一个元素添加到vector对象的尾部。

#include <iostream>
#include <vector>
#include <string>
using namespace std;
​
int main(){
   vector<char> vec;
​
   string iter_str = "helloword";
   int str_size = iter_str.size();
​
   for(int i = 0; i < str_size; i++){
      vec.push_back(iter_str[i]);
   };
​
   return 0;
}

这里就把字符串当中的字符插入到了vector当中,但是这里需要注意:

1、声明vector元素类型要和添加的元素类型一致,比如声明一个int类型的vector对象,结果加入字符串是不合适的。

2、一个新手需要小心的地方,string对象循环出来的元素是字符,也就是char,这里千万要注意,我有一个朋友,不小心卡了半个多小时。

empty和size

empty和size方法和字符串的是类似的:

empty判断vector对象是否为空,空返回true,(也可能使用1代替true)

size获取vector元素的个数,

下标索引操作

和字符串一样,(感觉vector和字符串好像啊),vector也为每个元素设置了下标,可以通过这个下标来获取下标位置上的值。

#include <iostream>
#include <vector>
#include <string>
using namespace std;
​
int main(){
   vector<char> vec;
​
   string iter_str = "helloword";
   int str_size = iter_str.size();
   for(int i = 0; i < str_size; i++){
      vec.push_back(iter_str[i]);
   };
​
   int vec_size = vec.size();
   for(int j=0; j < vec_size; j++){
       cout << vec[j] << endl;
   };
​
   return 0;
}
​

当然和字符串有不同的是vector对象可以设置索引为上的元素,但前提是这个索引位是存在的,不可以对尾部或者空vector对象进行设置。

#include <iostream>
#include <vector>
#include <string>
using namespace std;
​
int main(){
.....
   vec[0] = 'H';
   ......
   return 0;
}
​

注意

这里还是要强调一个小的细节,size计数是从1开始,比如有9个元素就是9,但是下标索引是从0开始,有9个元素最后一个元素下标是8

最后,还请给位大佬多多指点。