第三章《标准库类型vector初始化》知识点和部分课后习题答案以及学习感受

本文探讨了C++中vector类模板的初始化,包括模板实例化、初始化方式的差异,以及不同初始化语法产生的效果。同时,还提供了一些错误示例的修正,并给出了多个涉及vector对象初始化和操作的实际编程题目,旨在帮助读者深入理解vector的使用。

1、C++既有函数模板也有类模板,其中vector是一个类模板。编辑器根据模板创建类和函数的过程被称为实例化

2、列表初始值还是元素数量?
在某些情况下,初始化的真实含义依赖于传递初始值时用的花括号还是圆括号。用一个整数来初始化vector时,整数的含义可能是vector对象的容量也可能是元素的值。

  例子:  【1】vector<int> v1(10);      //v1有10个元素,每个值都是0。
   		  【2】vector<int> v2{10};       //v2有一个元素,该元素的值是10。
   		  【3】vector<int>v3(10,1)   //v3有10个元素,每个的值都是1。
   		  【4】vector<int>v4 {10,1}    //v4有2个元素,值分别是10和1。

3、下列vector对象的定义正确吗?不正确的请改正。
【1】vector<vector> ivec; 正确,创建了一个元素为vector的vector对象。
【2】vector svec=ivec; 不正确,类型不一致。
【3】vector svec(10,’‘null’); 正确,十个“null”对象。

	    解析:知识点:vector的初始化:
		1:引用不可以成为vector的元素,因为其不是对象。
		2:可以用花括号初始化每一个值。
		3:可以用括号指定元素个数或相同的元素值。
		4:只能使用直接初始化,不可以使用拷贝初始化(vector之间的拷贝是可行的,但要保证类型相同)

4、下列的vector对象各包含多少个元素?这些元素的值分别是多少?
【1】vector v1;
【2】vector v2(10);
【3】vector v3(10,42);
【4】vector v4{10};
【5】vector v5{10,42};
【6】vector v6{10};
【7】vector v7{10,“hi”};

                      解析:知识点:注意花括号和小括号在int和string 类型vector中的区别

											a:空vector
											b:10个初始值为0的int对象
											c:10个初始值为42的int对象
											d:1个初始值为10的int对象
											e:2个初始值为10、42的int对象
											f:10个字符串,初始化为“ ”(空)
											g:10个字符串,初始化为“hi”

4、编写一段程序,用cin写入一组整数并把他们存放入一个vector对象。

     考察知识点:push_back()函数向vector中传入元素。
     编写程序如下:
								         #include <iostream>
								         #include <vector>
								         using namespace std;
								         int main()
								              {
									                     vector<int> My_vector;
									                      int jjl;
									                     while (cin >> jjl)
									                           {
										                                     My_vector.push_back(jjl);
									                           }
									                     return 0;
								             }

5、修改题4中的程序用cin写入一组字符串并把它们存放在一个vector对象。

																	#include <iostream>
																	#include <string>
																	#include <vector>
																	using namespace std;
																	int main()
																	{
																		        vector<string> My_vector;
																		        string istring;
																		        while (cin >> istring)
																		              {
																			                 My_vector.push_back(istring);
																		              }
																		       return 0;
																	}

6、从cin读入一组词并把他们存入一个vector对象,然后设法将所有词都改写为大写形式。输出改变后的结果,没个词占一行。

     考察知识点:(1)可以使用C++中的toupper()函数快速转化为大写;
    (2)vector有size()函数得到大小,string有length()函数得到长度。
											解析:#include <iostream>
											#include <string>
											#include <vector>
											using namespace std;
											int main()
											{
												vector<string> My_vector;
												string istring;
												while (cin >> istring)
												     {
													         My_vector.push_back(istring);
												     }
												for (int i = 0; i < My_vector.size(); i++)
													for (int j = 0; j < My_vector[i].length(); j++)
													      {
														           My_vector[i][j] = toupper(My_vector[i][j]);
													      }
												   for (int i = 0; i < My_vector.size(); i++)
												             {
													                   cout << My_vector[i] << endl;
												             }
											}

7、如果想定义一个含有10个元素的vector对象,所有元素的值都是42,请列举出三种不同的实现方法。

				          1、 vector<int> ivec2{ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42};
					      2、vector<int> My_int2(10,42);
					      3、vector<int> My_int3 = My_int2;

8、读入一组整数并把他们存入一个vector对象,并将每对相邻整数的和输出来。

												#include <iostream>
												#include <string>
												#include <vector>
												using namespace std;
												int main()
											   {
													vector<int> My_vector;
													int a[10];
													for (int i = 0; i < 10; i++)
													{
														cin >> a[i];
													}
													for (int j = 0; j < 10; j++)
													{
														My_vector.push_back(a[j]);
													}
													int sum[10];
													for (int k = 0; k < 10; k++)
													{
														sum[k] = My_vector[k] + My_vector[k + 1];
														cout << sum[k] << endl;
														k++;
													}
												}	

9、修改题目8的程序要求先输出第一个和最后一个元素的和,接着输出第二个和倒数第二个元素的和,以此类推。

														程序:#include <iostream>
														#include <string>
														#include <vector>
														using namespace std;
														int main()
														{
															vector<int> My_vector;
															int a[10];
															for (int i = 0; i < 10; i++)
															{
																cin >> a[i];
															}
															for (int j = 0; j < 10; j++)
															{
																My_vector.push_back(a[j]);
															}
															int sum[10];
															for (int k = 0; k < 5; k++)
															{
																sum[k] = My_vector[k] + My_vector[9 - k];
																cout << sum[k] << endl;
															}
														}
									                   请输入0-9的数字结果全部为9。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

N1314N

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

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

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

打赏作者

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

抵扣说明:

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

余额充值