2012-03-16 107 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版本。目前它不在它的最終版本中,但從現在開始幾個月它可能會與自動更新一起工作。