2012-03-16 114 views
4

我想知道是否有任何方法可以将多个值作为单个值插入向量中,而无需使用临时变量?如何在C++中向量中插入多个值?

我的意思,例如:

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

v.push_back(create_something(x,y))? – nullpotent 2012-03-16 16:47:40

+0

在我的想法中,代码将更短,更清晰。如果没有任何合理的和可接受的方法,你可以说,这是不可能的! – 2012-03-16 16:50:05

+0

@MiladR:对不起,我误解了;没关系! – 2012-03-16 16:53:55

回答

13

给你类的构造函数,像这样:

Something(int x_, int y_) :x(x_), y(y_) {} 

然后,你可以这样做:

v.push_back(Something(x,y)); 

在C++ 11,你可以做到这一点,没有构造函数:

v.push_back({x,y}); 
+6

在C++ 11中,可以编写'v.push_back({x,y})'并且不需要构造函数。 – Nawaz 2012-03-16 16:51:56

+0

@Nawaz:是的。我正在测试,因为我不是100%正面。 – 2012-03-16 16:53:26

8

在C++ 11,可以使用炮台功能:

if (std::cin >> x >> y) 
{ 
    v.emplace_back(x, y); 
} 
else { /* error */ } 

这是假设您的Something类有一个(int, int)构造函数。否则,你可以使用push_back和括号初始值设定项,就像本杰明的答案一样。 (两个版本都可能会在通过一个聪明的编译器运行产生相同的代码,你可能想使你的类作为一个集合)

+0

好!我尝试这个,我没有得到错误!但是有什么命令可以告诉我我的C++编译器的版本吗?我知道它只是g ++,我在Ubuntu上! – 2012-03-16 17:01:07

+1

@MiladR:使用这个:'gcc --version'。它会告诉你你正在使用的版本。 – Nawaz 2012-03-16 17:07:32

+1

@MiladR:您可以使用'-v'选项获取您的编译器版本。请参阅[本表](http://gcc.gnu.org/projects/cxx0x.html)以查看您的版本是否支持您需要的C++ 11功能。我相信GCC 4.4支持所有建议。您只需传递'-std = C++ 0x'选项即可使用这些功能。 – 2012-03-16 17:10:23

7

在C++ 11,你可以这样做:

v.push_back({1,2}); 

您不需要按照其他答案的建议编写构造函数。

1

这不适用于C++ 11 Visual Studio 2012,除非您手动下载并更新到Beta版本。目前它不在它的最终版本中,但从现在开始几个月它可能会与自动更新一起工作。