启掘金成长之旅!这是我参与「掘金日新计划 · 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
最后,还请给位大佬多多指点。