21

c++11 でベクトルを定義する新しいショートカット方法について質問があります。次のクラスがあるとします

struct Tester{

  vector< vector<int> > data;

  Tester(){
    data = vector< vector<int> >();
  }

  void add(vector<int> datum){
    data.push_back(datum);
  }

};

次に、以下は期待どおりに機能します。

int main(){
    Tester test = Tester();
    vector<int> datum = vector<int>{1,2,3};
    test.add(datum);
}

しかし、これはしません:

int main(){
    Tester test = Tester();
    test.add(vector<int>{1,2,3});
}

誰かが私に違いを説明してもらえますか? 2 番目の main() で試みるショートカットを実行するにはどうすればよいですか?

4

2 に答える 2

26

あなたのコードは問題ないようですが、使用しているコンパイラはそうではありません (古いようです)。

ところで、あなたはやりすぎです。

これで十分です:

vector<int> datum{1,2,3}; //initialization

test.add({1,2,3}); //create vector<int> on the fly and pass it to add()

コンパイラを更新することを忘れないでください。

また、ラインdata = vector< vector<int> >();も多めです。必要ありません。ベクトルは自動的に構築されます。つまり、クラスのコンストラクターを空のままにしておくことも、とにかく何もしないため、まったく持たないこともできます。

于 2012-12-20T15:53:28.920 に答える