C++ Primer笔记(3.3.3)——其他vector操作
#include<iostream>
#include<string>
#include<vector>
using std::string;
using std::vector;
/*************************************************************************************************/
/* vector支持的操作 */
/* */
/* v.empty() ------ 如果v不含有任何元素,返回真;否则返回假 */
/* v.size() ------ 返回v中元素个数 */
/* v.push_back(t) ------ 向v的尾端添加一个值为t的元素 */
/* v[n] ------ 返回v中第n个位置上元素的引用 */
/* v1 = v2 ------ 用v2中元素的拷贝替换v1中的元素 */
/* v1 = {a,b,c...} ------ 用列表中元素的拷贝替换v1中的元素 */
/* v1 == v2 ------ v1和v2相等当且仅当他们的元素数量相同而且对应位置的元素值都相同 */
/* v1 != v2 ------ 与上相反 */
/* <, <=, >, >= ------ 顾名思义,以字典顺序进行比较 */
/*************************************************************************************************/
int main()
{
/* ----- 例子 ----- */
//访问vector对象中元素的方法和访问string对象中字符的方法差不多,也是通过元素在vector对象中的位置。
//例如,可以使用范围for语句处理vector对象中的所有元素:
vector<int> v{ 1,2,3,4,5,6,7,8,9 };
for (auto &i : v) //对于v中的每个元素(注意:i是一个引用)
i *= i; //求元素值的平方
for (auto j : v)
std::cout << j << " ";
std::cout << std::endl;
/* ---------------- */
/* ----- 计算vector内对象的索引 ----- */
//使用下标运算符能获取到指定的元素。和string一样,也是从0开始计起,下标的类型为size_type类型。
//只要vector对象不是一个常量,就能向下标运算符返回的元素赋值。
//举个例子,将0到100的成绩分为10个分段的不同等级,然后对对应等级的分数进行统计:
//如输入是: 42 65 95 100 39 67 95 76 88 76 83 92 76 93
//对应输出: 0 0 0 1 1 0 2 3 2 4 1
//表示成绩在30分以下的没有,30到90分有一个,40到49分有一个,50分到59分没有,60分到69分有2个.......1个是满分。
vector<unsigned> scores(11, 0); //11个分数段,全部初始化为0
unsigned grade, num = 0;
while (std::cin >> grade) //读取成绩
{
num++;
if (grade <= 100) //只处理有效成绩
++scores[grade / 10]; //将对应分数端的计数值加1
if (num == 10) //输入10次后退出
break;
}
std::cout << "统计后为:" <<std::endl;
for (auto k : scores)
std::cout << k << " ";
std::cout << std::endl;
std::cout << std::endl;
/* ---------------------------------- */
/* ----- 不能用下标形式添加元素 ----- */
//刚接触C++语言的程序员也许会认为可以通过vector对象的下标形式来添加元素,实时并非如此。
vector<int> ivec; //空vector对象
for (decltype(ivec.size()) ix = 0; ix != 10; ++ix)
{
// ivec[ix] = ix; //严重错误:ivec不包含任何元素
ivec.push_back(ix); //正确
}
//vector对象(以及string对象)的下标运算符可用于访问已存在的 元素,而不能用于添加元素
/* ---------------------------------- */
return 0;
}