c++ primer(第五版)笔记 第三章(2)vector 库初探

来源:互联网 发布:淘宝产品关联怎么做 编辑:程序博客网 时间:2024/06/06 03:36
#include<iostream>#include<vector>#include<string>using std::string;using std::vector;using std::cout;using std::endl;using std::cin;void vector_test();void practice_3_16();void practice_3_20();int main(){vector_test();practice_3_16();practice_3_20();return 0;}//打印void cout_vector(const vector<int> &pv){for (auto c : pv)cout << c << "-";cout << endl;}void cout_vector_string(const vector<string> &pv){for (auto c : pv)cout << c << "-";cout << endl;}void vector_test(){//标准库类型 vector 是类模板(class template),并不是类型,表示对象的集合,并且所有的对象类型都相同//需要头文件 <vector>//实例化(instantiation)时,编译器根据模板名后的尖括号内的类型生成类或函数,除引用外,大部分基本类型和类类型都可以构成 vector 对象,vector 对象也可以作为其元素//常用初始化方式vector<int> v1;//空容器cout_vector(v1);vector<int> v4(5, 9);//指定元素数量为 5,元素初始值为 9cout_vector(v4);vector<int> v2(v4);//将一个容器元素拷贝到另一个容器中,前提是2个容器内的元素类型相同cout_vector(v2);vector<int> v3 = v4;//同 v2cout_vector(v3);vector<int> v5(5);//指定元素数量为 5,但没有初始值,则创建一个值初始化(value initialized)的元素初值,并赋给所有元素,使用该方法要求1.只能使用()的直接初始化2.类元素不需要提供初始值cout_vector(v5);vector<int> v6{12,324,63,15,74,12};//使用初始化列表为每个元素指定了初始值cout_vector(v6);vector<int> v7 = { 121, 324312, 6312, 151, 174, 12 };//使用初始化列表为每个元素指定了初始值cout_vector(v7);vector<int> v8(v6.cbegin(), v6.cend());//使用迭代器指定了一个范围cout_vector(v8);//上面的初始化过程,使用了几种不同的方式 ,= () {}//除以下情况外,其他情况是可以互换初始化方式的//1.拷贝初始化时,即使用 = ,只能提供一个初始值//2.对于类内数据成员初始化,可以使用 = 的拷贝初始化和{}的列表初始化,但不能用(),无法与函数声明区分//3.如果提供的是所有元素值的列表,只能使用{}的列表初始化,不能用(),无法与函数调用区分//元素初始值还是初始个数,可以通过()或{}区分,()表示构造对象,{}表示用值列表来初始化对象,如果值无法初始化元素时,会考虑构造vector<int> v9(5);//v9 含有5 个初始值为 0 的 intcout_vector(v9);vector<int> v10{5};//v10 只有一个 int, 值为5cout_vector(v10);vector<int> v11(5, 7);//v9 含有5 个初始值为 7 的 intcout_vector(v11);vector<int> v12{5, 7};//v9 含有2 个 int, 一个值为5, 一个值为 7cout_vector(v12);//vector<string> v13("hi");//无法构建vector<string> v14{ "hi" };//1个元素,值为 "hi"cout_vector_string(v14);vector<string> v15(5);//5 个元素,都为空字符串cout_vector_string(v15);vector<string> v16{5};//无法用 5 初始化元素,尝试使用构建,5 个元素,都为空字符串cout_vector_string(v16);vector<string> v17{ 5,"hi" };//无法用 5 初始化元素,尝试使用构建,5 个元素,都为"hi"cout_vector_string(v17);//使用 push_back(n) 将 n 压入(push) vector 容器的尾端(back)v17.push_back("xi");cout_vector_string(v17);//可以通过 vector<T>::size_type 类型的下标访问容器内的元素,但不能通过下标添加元素decltype(v17.size()) x = 5;cout << v17[5] << endl;//v17[6] = "ga";//运行时错误,越界访问不可预知的错误}//输入一组字符串,存入vector,然后转为大写输出void practice_3_16(){string str;vector<string> vs;while (cin >> str)if (!str.empty())vs.push_back(str);for (auto &s : vs){for (auto &c : s)c = toupper(c);cout << s << endl;}}//输入一组整数,计算2个相邻数的和,最后依次计算第一个和最后一个,第二个和倒数第二个 。。。的和void practice_3_20(){int n;vector<int> vi;decltype(vi.size()) x = 0;while (cin >> n){vi.push_back(n);//计算临值的和x = vi.size();if (x > 1){cout << "sum:" << vi[x - 2] + vi[x - 1] << endl;}}//依次计算第一个和最后一个,第二个和倒数第二个 。。。的和x = vi.size();if (x < 1){cout << "too few num..." << endl;return;}int j = 0, i = (x % 2) ? ((x - 1) / 2) : (x / 2);cout << "x:" << x << "i:" << i << endl;while (j != i){cout << "sum1:" << vi[j] + vi[x - 1 - j] << endl;++j;}}

0 0
原创粉丝点击