[英]how to correctly initialize a std::vector with type of a struct which contains a std::vector of std::thread
[英]Initialize a struct which contains vector
我正在尋找一種初始化復雜結構的方法,該結構在一行中包含向量。
例如,如果我有這個結構:
struct A{
double x;
double y;
};
struct B{
double z;
double W;
};
struct C{
A a;
B b;
};
我可以用這種方式初始化C: C c = {{0.0,0.1},{1.0,1.1}};
但是如果我必須初始化這樣的結構呢?
struct A{
double x;
double y;
};
struct B{
vector<double> values;
};
struct C{
A a;
B b;
};
我必須在一行中完成它,因為我想允許我的應用程序的用戶在單個字段中指定所有初始值。 當然,我更願意采用標准方式來做而不是自定義方式。
謝謝!
您可以在C ++中以非常類似的方式初始化C
到C:
C c = {{0.3, 0.01}, {{14.2, 18.1, 0.0, 3.2}}};
如果你沒有使用C ++ 11(所以你不能使用Mankarse的建議),boost可以幫助:
C c = { {0.1, 0.2}, {boost::assign::list_of(1.0)(2.0)(3.0)} };
你可以這樣做:
C obj = { { 0.0, 0.1f }, std::vector<double>( 2, 0.0 ) };
但顯然它並不理想,因為矢量中的所有值都必須相同。
問題是如何在第二個例子中初始化B?
你無法初始化這樣的矢量:
std::vector<int> v = { 1, 2, 3 }; // doesn't work
你可以這樣做
int data[] = { 1, 2, 3 };
std::vector<int> v( &data[0], &data[0]+sizeof(data)/sizeof(data[0]));
(有更好的方法可以做到這一點)。 然而,這不是“一線”。
這有效,我測試了它:
template< typename T >
struct vector_builder
{
mutable std::vector<T> v;
operator std::vector<T>() const { return v; }
};
template< typename T, typename U >
vector_builder<T>& operator,(vector_builder<T>& vb, U const & u )
{
vb.v.push_back( u );
return vb;
}
struct B
{
vector<double> v;
};
B b = { (vector_builder(),1.1,2.2,3.3,4.4) };
C c = { {1.1, 2.2 }, {(vector_builder(),1.1,2.2,3.3,4.4)} };
struct C {
A a;
B b;
C(double ta[2], vector<double> tb) {
a = A(ta[0],ta[1]); // or a.x = ta[0]; a.y = ta[1]
b = tb;
}
};
那么你可以用類似的東西進行初始化
C c = C( {0.0, 0.1} , vector<double> bb(0.0,5) );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.