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,很簡單的問題。