“一组向量的向量” - 这可能吗?

时间:2012-01-08 11:14:55

标签: c++ templates

是否可以在模板中使用模板,列表可以是任何事物的列表,字符串可以是任何字符串,所以我可以有一些其他类型的字符串列表,例如int?

首先想到的是:

std::list<std::vector<int>> listOfVectorsOfIntegers;

可悲的是,它失败了,所以我想知道,有没有办法合法地做到这一点?

编辑:对不起,我实际上并没有在我的情况下使用字符串,只是为随机容器键入它而不考虑它不是模板。在我的情况下,问题是使用&gt;&gt;而不是&gt; &gt;,添加一个空格就可以修复它。

4 个答案:

答案 0 :(得分:8)

std::string本身不是类模板

你可能想要其中一个:

std::list<std::vector<int>>   a;
std::vector<std::vector<int>> b;
std::list<std::list<int>>     c;

在C ++ 03和C ++ 98中,>>应该用空格分隔;在C ++ 11中,没有这样的需求。

答案 1 :(得分:1)

std::list<std::basic_string<int> > listOfStringsOfIntegers;

答案 2 :(得分:0)

std::string不是模板类。它是模板类的特定实例化的typedef:它是std::basic_string<char>的typedef。如果你想要一个int类型的字符串,你可以使用std::basic_string<int>。 (我不是说这是一个好主意,但它有可能。)

不要忘记在>>之间插入一个空格,以防止将其解析为>>运算符。

std::list<std::basic_string<int> > listOfStringsOfIntegers;

答案 3 :(得分:0)

std :: string不是模板类,您可能需要std :: vector或std :: list。但答案是肯定的。

你可以有这样的声明:

std::list<std::list<int> > myList;

在两个>字符之间留一个空格很重要,否则编译器将无法理解它。 (编辑:我在这里谈论旧的C ++标准。这在C ++ 11中应该不是问题。)