3.21
了解下begin()函数和end()函数的意义,就会迭代了吧,很简单的。
3.22
嗨呀,好气啊,C++11中的新特性cbegin()和cend()函数——指向容器的第一个元素和最后一个元素的下一个位置,都用不了。如果要使用迭代器的话,做不出来的。
3.23
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void main()
{
vector<int> text(10,5);
for (auto it = text.begin(); it != text.end();it++) //注意判断其是否为空
{
*it = *it * 2;
cout<<*it<<endl;
}
}
比较简单的题。
3.24
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void main()
{
vector<int> text(10);
for (int i = 0; i < 10;i++)
{
cin>>text[i];
}
for (auto vector_begin = text.begin(), vector_end = text.end();vector_begin != vector_end;vector_begin++)
{
vector_end--;
cout<<*vector_begin + *vector_end<<endl;
}
}
注意end()函数指的是最后一个元素的后一个位置,而不是最后一个元素!!!
3.25
这题主要考察迭代器的相关知识
迭代器加减一个整数仍然会得到一个迭代器
要对迭代器本身的元素进行操作需要使用复合语句 += 或者 -=,或者对迭代器进行取值使用*,再进行操作。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void main()
{
vector<int> grade(10,0);
int number;
while (cin >> number)
{
if (number > 100)
{
cout<<"The inupt number is wrong"<<endl;
break;
}//超过100报错
auto it = grade.begin(); //迭代器指向第一个元素
int n = number/10;//判断分数所属的等级
it = it + n; //找到所属变量
++(*it); //执行加1操作
}
for(int i = 0;i<10;i++)
{
cout<<i*10<<"~"<<i*10+10<<" ";
cout<<grade[i]<<endl;
}//输出分数的等级及相应个数
}
3.26
因为end指的是最后一个元素的后一个位置!!!(vectoer迭代器的性质要记清楚啦)
3.27
理解复杂数组的声明(难点)
不可以将数组的内容拷贝给其他数组当作初始值,也不能用数组为其他数组赋值。
int a[3] = {0,1,3};
int a1[] = a; //错误
a2 = a; //错误
复杂数组声明的理解
int *a[10]; //a数组含有10个指针整形
int &a[10]; //错误,不存在引用的数组
int (*a)[10]; //a是一个指针,指向一个含有10个整数的数组
int (&a)[10]; //a是一个引用,引用一个含有10个整数的数组
int *(&a)[10]; // a是数组的引用,数组含有十个指针
理解方法:从数组的名字开始,由内向外顺序读取,先左后右,左边为类型。
3.28
string不是内置的数据类型,int是
sa数组为空。
ia数组含有10个整数,皆为0。
sa2数组为空。
ia2数组含有10个整数,在函数体内,值不确定。
3.29
数组的缺点:数组的大小是确定不变的,不可以向数组中添加元素,丧失了vectoer的灵活性。
3.30
数组大小为10,那么索引应该是0~9,很简单的问题。