for eachの使い方

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
heim

for eachの使い方

#1

投稿記事 by heim » 7年前

for each文を使うために

コード:

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main()
{
    vector<string> vec;
    vec.push_back("for");
    vec.push_back("each");

    for each (int str in vec) {
        cout << str << endl;
    }

    return 0;
}
のようにすると、for each (int str in vec) の"vec"の部分に波線が引かれ、

std::vector(int, std::allocator<int>>::iterator std::vector<int, std::allocator<int>>::begin()
+1 オーバーロード
Error: "std::vector<int, std::allocator<int>>"型の式では'for each'ステートメントは実行できません

というエラーが表示されます。どうすればいいのでしょうか?
VisualStudio2012です。

zxc
記事: 79
登録日時: 7年前
住所: 日本の背骨(?)あたり

Re: for eachの使い方

#2

投稿記事 by zxc » 7年前

  自分はfor each構文使ったことがないので的外れかもしれませんが、検索してみるとvector<T>とfor each(T ~)の二つのTの型が同じでないといけないようです。一応以下のように変更してみたところ、動きました。

コード:


#include <iostream>
#include <vector>
#include <string>
 
using namespace std;
 
int main()
{
    vector<string> vec;
    vec.push_back("for");
    vec.push_back("each");
 
    for each (string str in vec) {
        cout << str << endl;
    }
 
    return 0;
}


実行結果

コード:

for
each
続行するには何かキーを押してください . . .

heim

Re: for eachの使い方

#3

投稿記事 by heim » 7年前

zxc さんが書きました:  自分はfor each構文使ったことがないので的外れかもしれませんが、検索してみるとvector<T>とfor each(T ~)の二つのTの型が同じでないといけないようです。一応以下のように変更してみたところ、動きました。
すみません、いろいろ変更して試したしたせいで間違えてしまったようです。
提示されたソースコードでもやはりできませんが、エラーメッセージがこのようにかわりました。

std::vector<std::string, std::allocator<std::string> >vec
Error: "std::vector<std::string, std::allocator<std::string>>"型の式では'for each'ステートメントは実行できません

heim

Re: for eachの使い方

#4

投稿記事 by heim » 7年前

連投済みません。試さずに質問してしまって申し訳ないのですが、赤の波線を無視してコンパイルしたところ、成功してしまい実行もできました。
なぜエディタに警告を示す赤の波線が引かれたのでしょう?

Suikaba
記事: 194
登録日時: 9年前

Re: for eachの使い方

#5

投稿記事 by Suikaba » 7年前

VS2012で全く同様のコードが動作しましたので、そのErrorの原因はごめんなさい、わからないです。
しかし、VS2012なら Range-based for が使える上、そうでなくても標準の std::for_each がありますので、そちらを使うことを推奨します。for each( type v in container ) の形はコンパイラの独自拡張で不安定かつ互換性もなかった気がします。

閉鎖

“C言語何でも質問掲示板” へ戻る