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。