2015-12-28 204 views
-3

彼此內的多個數據結構,我一直在尋找幫助有關如何初始化我的構造函數內的以下數據結構回溯:初始化C++ 11

stack<tuple<vector<set<int> >, int, int> > record; //none of the structures have been initialized yet 

感謝大家的幫助。

+0

也許你可以在上下文中向我們展示這段代碼,並分享一些你已經嘗試過的東西。 –

回答

0

當你有這樣複雜的類型時,在判斷如何初始化類型之前將它分爲基本類型是有幫助的。

將您的類型分爲基本類型,它看起來像:

stack<tuple<vector<set<int> >, int, int> > record; 
    ^        ^
     |         | 

     tuple<vector<set<int> >, int, int> 
      ^   ^^^^^
      |    | | | | | 

      vector<set<int> > 
       ^ ^
        |  | 

        set<int> 
        ^^ 
         | | 

要初始化這種類型的對象,你必須弄清楚如何從構成基本類型的建立。

初始化一個int

int a{0}; 

初始化set<int>

set<int> b{1, 2}; 

初始化vector<set<int>>

vector<set<int>> c{ {1, 2}, {2, 3, 4}, {4, 5, 6, 8} }; 

初始化一個tuple<vector<set<int>>, int, int>

tuple<vector<set<int>>, int, int> d{ { {1, 2}, {2, 3, 4}, {4, 5, 6, 8} }, 10, 20}; 

但是,您不能使用相同的策略來初始化,因爲std::stackstack沒有一個構造函數,你可以用這樣的:

stack<int> e{1, 3, 5}; 

這意味着,你不能初始化stack<tuple<vector<set<int>>, int, int>>爲:

stack<tuple<vector<set<int> >, int, int> > record 
{ 
    {{ {1, 2}, {2, 3, 4}, {4, 5, 6, 8} }, 10, 20}, 
    {{ {1, 2}, {2, 3, 4}, {4, 5, 6, 8} }, 10, 20} 
}; 

您的唯一選擇是默認構造record並向其中添加項目。

stack<tuple<vector<set<int> >, int, int> > record; 
using item_type = decltype(record)::value_type; 
record.push(item_type{{ {1, 2}, {2, 3, 4}, {4, 5, 6, 8} }, 10, 20}); 
record.push(item_type{{ {1, 2}, {2, 3, 4}, {4, 5, 6, 8} }, 10, 20});