假设我有一个结构,只是将其用作聚合数据保存设备。例如,下面的结构包含两个整数值。假设我有一个名为myVec的结构的 vector ,并且我想通过push_back向该 vector 添加新的结构。我的理解是,在C++ 11中,无需编写命名变量并将该变量作为参数传递,就可以实现此目的,但是可以执行以下操作。
struct coordinate {
int y;
int x;
};
//assume an initialized vector<coordinate> myVec
//and two ints newY, newX not known at compile time
myVec.push_back( {newY,newX});
根据https://en.cppreference.com/w/cpp/language/aggregate_initialization的Notes部分,
似乎这是在构造函数初始化器列表中使用聚合初始化的示例,但我对此可能是错的。该消息来源表明,此语法在C++ 11之前不起作用,而在MSVS2017上可以使用,但不适用于Python的Visiual C++,这正是我的目标。是否存在C++ 11之前的语法,该语法允许我在不首先创建命名结构变量并将该命名变量传递给push_back函数的情况下向 vector 添加另一个结构?尽管这只是我要完成的任务的一个示例,但我的项目中将有多个这样的 vector ,并且结构并不总是简单的整数对。我宁愿避免几个 float 的“临时”虚拟变量作为参数的占位符,仅仅是因为避免它们 float 很干净。下面提供了一个我希望避免但如有需要的示例。该示例将x和y值都介于0和9之间(包括0和9)的所有坐标列表添加到 vector 中。
coordinate temp = {0,0};
for (int r = 0; r < 10; ++r){
for (int c = 0; c < 10; ++c){
temp.y = r;
temp.x = c;
myVec.push_back(temp);
}
}
最佳答案
只需给您的结构构造函数:
struct coordinate {
int x, y;
coordinate( int ax, int ay ) : x(ax), y(ay) {}
};
然后,您可以说以下内容:
myVec.push_back( coordinate( 12, 42 ) );
关于c++ - 在C++ 08中初始化对象以作为参数传递的首选语法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51974635/