範圍 for(range for)語句,對于對于周遊給定序列中的每個元素并對序列中的每個值執行某種操作是非常友善的。
基本文法:
for (declaration : expression)
{
statement;
}
其中,expression部分是一個對象,用于表示一個序列;declaration部分負責定義一個變量,該變量将被用于通路序列中的基礎元素。
每次疊代,declaration部分的那個變量,将被初始化為expression部分的下一個元素值。
如:
vector<int> vecIntTest(10, 0);//表示将該數組初始化為10個1.
for (auto data : vecIntTest)
{
cout << data << '\t';//将值依次列印輸出
}
這種方法可以結合輸入進行使用,如:
int main()
{
vector<int> vecInt;
int iTemp;
while (cin >> iTemp)
{
vecInt.push_back(iTemp);
}
for (auto data : vecInt)
{
cout << data << '\t';
}
cout << endl;
return 0;
}
以上的這種方式,可以說簡化了對于一個序列周遊的代碼量,推薦使用。
适用範圍:
一個序列,包括各種容器,包括數組,甚至包括字元串。
如:
string strTest = "Hello World";
for (auto c : strTest)//這個地方沒有使用引用,一個副本就可以了
{
cout << c << '\t';
}
以上代碼可以延伸為将裡面的字元全部變為大寫,如下:
string strTest = "Hello World";
for (auto &c : strTest)//注意,這個地方應該使用“引用”
{
c = toupper(c);//因為使用的是引用,是以改變的是原先的值
}
cout << strTest << endl;//最終的輸出結果是HELLO WORLD
根據需求靈活使用“引用”和“非引用”(需要更改原先的值就使用引用,否則就不要使用引用)。
參考書籍:《C++ Primer》