一時的なvalarrayを繰り返し処理したいのですが、機能しません。 C++の範囲ベースのループオーバーvalarray rvalueは機能しません。
#include <iostream>
#include <valarray>
int main()
{
using namespace std;
valarray<int> numerators = {99, 26, 25};
valarray<int> denominators = {9, 2, 5};
for (int i : numerators/denominators) { cout << i << ","; }
// lots of errors
return 0;
}
以下は私が
temp_array
のようなオブジェクトを定義しないことを除いて、達成したいものの最小限の作業例です。ここに私の(非稼働)のコードです。
#include <iostream>
#include <valarray>
int main()
{
using namespace std;
valarray<int> numerators = {99, 26, 25};
valarray<int> denominators = {9, 2, 5};
valarray<int> && temp_array = numerators/denominators;
for (int i : temp_array) { cout << i << ","; }
// prints 11,13,5,
return 0;
}
マイコンパイラはg ++バージョン4.8.5(Red Hat 4.8.5-4)です。 -std = C++ 0xフラグを付けてコンパイルしています。
for (auto&& i : temp_array)
やfor (int const & i : temp_array)
などの他の構文を試しましたが、動作しません。 (また、単一の式でこれを行うには公式の方法を含んでいる)のドキュメントから
を参照してください 'valarray'の'オペレータ/ 'プロキシオブジェクトラ式テンプレートを返すことが許可されています。 – chris
私はあまりにも長く、明らかにC++から離れています。誰かが 'for(int i:temp_array){}'がループ文のためにどのように有効であるか説明できますか? 'for(init; end_condition; increment)'のようなものであってはいけませんか? – user1717828
@ user1717828 C++ 11のrange-based forループを参照してください。 – milleniumbug