在彼此内部初始化多个数据结构c ++ 11

时间:2015-12-28 02:39:15

标签: c++ c++11 data-structures constructor initialization

我正在寻找有关如何在构造函数内部初始化以下数据结构以进行回溯的帮助:

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

谢谢大家的帮助。

1 个答案:

答案 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};

但是,您无法使用相同的策略初始化stack,因为std::stack没有可以使用的构造函数:

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});