2015-01-10 59 views
0
class V 
{ 
private: 
    int m_size; 
    std::vector<int> m_list; 
public: 
    V(int size, std::initializer_list<int> init_list) : m_size(size) 
    { 
     m_list = std::vector<int>(init_list.begin(), init_list.end()); 
    } 
}; 

我做了一個類,它有一個構造函數採用多個參數,包括initializer_list。我想使用這個類像C++獲取構造函數的初始化列表與其他參數

V v(2) = {1, 2}; 

但我只能夠使用這個類像

V v(2, {1, 2}); 

我不能非initializer_list部分和initializer_list部分分隔參數,如作爲第一我寫的代碼?

+2

'size'參數是否總是與'initializer_list'中的元素數相同?如果是這樣,你可以使用['initializer_list :: size'](http://en.cppreference.com/w/cpp/utility/initializer_list/size)成員函數。你的第一個語法沒有意義,所以不,你不能那樣做。你需要使用嵌套的大括號。 – Praetorian

+0

@Praetorian它不是問題的直接答案,但它確實有幫助。謝謝。我會用這個。 – Mossid

+0

因此,如果確實是初始化列表的大小,那麼接下來的問題是爲什麼您要將大小存儲在單獨的變量中?一個'矢量'跟蹤自己的大小。 – Praetorian

回答

1

你可以改變你的構造函數剛剛拿到initializer_list有:

class V 
{ 
private: 
    std::vector<int> m_list; 
    int m_size; 
public: 
    V(std::initializer_list<int> init_list): 
     m_list(init_list.begin(), init_list.end()), 
     m_size(m_list.size()) { } 
}; 

,構建V對象有:

V v1 = {1,2}; 
V v2({1, 2}); 

你並不需要的大小是輸入了感謝std::vector

相關問題