2013-08-25 48 views
3

所有我能找到使用初始化列表看填充向量的例子似乎都可以創建堆棧上的矢量:矢量<string>在堆上,使用初始化列表?

vector<string> v = {"1","2","3"} 

我想實現這樣的:

vector<string>* v = new vector<string>(){"1","2","3"}; 

但我得到編譯器錯誤。使用初始化列表可以在堆上聲明一個向量嗎?

+2

嗯。 *爲什麼*你想在堆上創建一個向量?無論如何,如果您這樣做,請不要將結果存儲在原始指針中。這絕對是不行的。 –

回答

3

您需要刪除括號:

vector<string>* v = new vector<string>{"1","2","3"}; 

Demo on ideone。請注意,這在C++ 11之前不起作用。

另請注意,雖然示例中的矢量是在堆棧上創建的,但其內容仍然在堆上創建。如果您希望將內容保存在堆棧中,並且在編譯時已知內容的大小,請使用std::array而不是std::vector

+0

我在第一個打開的大括號之前發現一個錯誤,表示它期待分號。我正在使用VS2012編譯器。 – user997112

+0

@ user997112這是因爲VS2012的C++不完全符合C++ 11。這是[圖表顯示編譯器不完全支持初始化程序列表](http://msdn.microsoft.com/en-us/library/vstudio/hh567368.aspx)。 – dasblinkenlight

+0

@ user997112,它應該與2013年預覽一起工作。 – chris

1

你想用其中的一個:

  1. std::vector<std::string>* v = new std::vector<std::string>({"1","2","3"});
  2. std::vector<std::string>* v = new std::vector<std::string>{"1","2","3"};