由於C++ 11引入了基於範圍的for循環(range-based for in c++11),表達循環遍歷整數範圍的最新方法是什麼?Neatest方式循環一系列整數?
而不是
for (int i=0; i<n; ++i)
我想寫點東西像
for (int i : range(0,n))
請問那種新標準的支持什麼?
更新:本文介紹瞭如何實現在C++ 11的範圍發電機:Generator in C++
由於C++ 11引入了基於範圍的for循環(range-based for in c++11),表達循環遍歷整數範圍的最新方法是什麼?Neatest方式循環一系列整數?
而不是
for (int i=0; i<n; ++i)
我想寫點東西像
for (int i : range(0,n))
請問那種新標準的支持什麼?
更新:本文介紹瞭如何實現在C++ 11的範圍發電機:Generator in C++
雖然你不能用純C++(使用當前的C++標準庫功能)你可以用提升的幫助下做到這一點:
#include <boost/range/irange.hpp>
#include <iostream>
using namespace boost;
using namespace std;
int main(int argc, char **argv)
{
for(auto i : irange(1, 10))
cout << i << "\n";
return 0;
}
而且,Boost.Range
包含了一些更有趣的範圍與新for
循環使用時,你會發現非常有用的。例如,使用Boost.Range可以使for
反向循環。
基本上,可以實現一個完全滿足基於範圍的需求的類。 – 2017-04-05 14:49:30
@EuriPinhollow,我選擇了不好的措辭。現在更新。 – ixSci 2017-04-05 15:00:33
最巧妙的方法仍然是這樣的:
for (int i=0; i<n; ++i)
我想這樣做,但我不會這麼稱呼它:
#include <iostream>
int main()
{
for (auto i : { 1,2,3,4,5 })
{
std::cout<<i<<std::endl;
}
}
取決於您要處理的整數,還要考慮<numeric>
標題,尤其是 std::iota與std :: transform和std :: fill的結合取決於具體情況。
爲什麼你想首先循環一系列整數? – Xeo 2013-02-26 12:27:16
@Xeo,你認真嗎?循環遍歷整個範圍(我非常確定)在C源代碼片段中,不是一個簡單的'HelloWorld'程序。或者你的意思是:爲什麼你想要使用基於範圍的'for'呢? – paxdiablo 2013-02-26 12:30:07
@paxdiablo:我死了 - 認真。給我一個很好的理由來循環一系列整數。你用這些整數來索引什麼?循環/迭代那個東西。顯式循環非常容易出錯。我有效使用它們的唯一時間是基準循環。 – Xeo 2013-02-26 12:31:55