我想知道有没有办法可以在不使用临时变量的情况下将矢量中的多个值作为单个值插入?
我的意思是例如:
struct Something{
int x;
int y;
};
int main()
{
vector <Something> v;
int x, y;
cin >> x >> y;
v.push_back(x, y);
}
有没有办法避免这样做(定义另一个变量,然后插入,而不是直接插入x, y
):
Something temp;
temp.x = x;
temp.y = y;
v.push_back(temp);
答案 0 :(得分:13)
给你的类一个构造函数,如下所示:
Something(int x_, int y_) :x(x_), y(y_) {}
然后你可以这样做:
v.push_back(Something(x,y));
在C ++ 11中,您可以在没有构造函数的情况下执行此操作:
v.push_back({x,y});
答案 1 :(得分:8)
在C ++ 11中,您可以使用安置功能:
if (std::cin >> x >> y)
{
v.emplace_back(x, y);
}
else { /* error */ }
这假定您的Something
类具有(int, int)
构造函数。否则,您可以将push_back
与大括号初始化器一起使用,就像本杰明的答案一样。 (两个版本在运行聪明的编译器时可能会生成相同的代码,您可能希望将您的类保留为聚合。)
答案 2 :(得分:7)
在C ++ 11中,您可以这样做:
v.push_back({1,2});
您不需要按照其他答案的建议编写构造函数。
答案 3 :(得分:1)
除非您已手动下载并更新到Beta版,否则这在C ++ 11 Visual Studio 2012中不起作用。目前它不在最终版本中,但从现在开始几个月它可能会使用自动更新。