1

単一の「行」内のベクトルの配列内で一連のクラスを初期化できるかどうかを知りたかったのです。

class A {
     public:
         A(int k) {...}
};

[...]

#include <array>
#include <vector>
using namespace std;

array<vector<A>, 3> = { { A(5), A(6) }, { A(1), A(2), A(3) }, { } };

ご想像のとおり、この解決策は機能しません (そうでなければ、私はここにいません!)。それを行う最も速い方法は何ですか?

4

2 に答える 2

2

これは、繰り返し言及する必要なく、それを行いますA:

array<std::vector<A>, 3> v{{ {1}, {2,3,4}, {} }};

コンストラクターが 2 つの引数を取る場合は、中括弧内に記述します。

array<std::vector<A2>, 3> v2{{ {{1,2}}, {{2,3},{4,5},{8,9}}, {} }};

コンストラクターが明示的である場合にも機能する次の構文をお勧めします。

std::array<std::vector<A2>, 3> v2{{ {A2{1,2}}, {A2{2,3},A2{4,5},A2{8,9}}, {} }};  

完全な例:

#include <array>
#include <vector>
#include <iostream>

struct A2 {
  A2(int k,int j) : mk(k),mj(j) {}
  int mk;
  int mj;
};

int main (){
  std::array<std::vector<A2>, 3> v2{{ {{1,2}}, {{2,3},{4,5},{8,9}}, {} }};  
  int i=0;
  for (auto &a : v2){
    std::cout << "... " << i++ <<std::endl;
    for (auto &b : a){
      std::cout << b.mk << " " <<b.mj <<std::endl;
    }
  }
}
于 2012-10-30T21:45:14.807 に答える
0

これは許可されるべきだと思います:

#include <array>
#include <vector>
using namespace std;

class A {
     public:
         A(int k) {}
};

array<vector<A>, 3> v = { vector<A>{5, 6}, vector<A>{1, 2, 3}, vector<A>{} };

簡単なテストでは、g++ 4.7.1 は同意しているようです。

于 2012-10-30T21:43:12.570 に答える