C++ Primer笔记(3.3.3)——其他vector操作

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;
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fire丶Chicken

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值