一、vector初始化的一些实例
1、vector<int> v1; //v1是一个空vector,元素为int类型,执行默认初始化
2、vector<int> v2(10); //v2有10个元素,每个值都是0
3、vector<int> v3(10, 42); //v3有10个值,每个值初始化为42
4、vector<int> v4{ 10 }; // v4有1个值,为10
5、vector<int> v5{ 10, 42 }; //v5有两个值,为10,42
6、vector<string> v6{10}; //v6有10个值,类型为string的空字符,(强制转换为容量为10的string的vector)
7、vector<string> v7{ 10, "hi" }; //v7有10个值,每个初始化为“hi”
二、将string类型的一组词(一句话)的所有字符都转换为大写
源代码如下:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main(){
vector<string> vStr;
string s;
char ch = 'y';
while (cin >> s){
vStr.push_back(s);
cout << "continue ?" << endl;
cin >> ch;
if (ch == 'y' || ch == 'Y') //每输入一个字符串就在此判断输入是否继续
cout << "Keep on it !" << endl;
else{
cout << "Stop it !" << endl;
break;
}
}
cout << "The output result is :" << endl;
for (auto &mem : vStr)
{ // 在这里,只有当mem,i为引用时,才可以修改
for (auto &i : mem) //mem为string,i为char
i = toupper(i);//改为大写,是通过int类型的转换(应该可以理解为将char转换为int),,,,,,将一组词分为单个词,再将每个词的每个字符逐一转换为大写
cout << mem << " " << endl;
}//
//for (auto &i : vStr)
// i = toupper(i);//不存在string到int的转换函数,这样是不对的
return 0;
}
三、push_back与利用引用类型
vec.push_back(),这个函数的意义是在vec的尾后添加元素,所以这个函数无法实现将容器中原初始化为0的元素修改为所期望的值。如果想达到修改的目的,需要将vector中的元素定义一个引用类型的变量,然后再通过该变量的赋值来实现vector内元素的修改。
四、begin、end与front、back
首先,begin和end操作是生成指向容器中第一个元素和尾元素之后位置的迭代器。而front和back是分别返回容器中首元素和尾元素的引用。若想通过迭代器获取首元素及尾元素的引用,则需要解引用。
auto val = *vec.begin();
auto last = vec.end();
auto val2 = *(--last); //因为vec.end()返回的是尾元素之后位置,所以先拷贝至last,再通过自减一,再解引用,赋值给val2才得到尾元素的引用。