做vector<vector<T...>>和vector<vector...有什么区别<T>>
What's the difference between doing vector<vector<T...>> and vector<vector<T>...>
我之前看到过这样的代码:
using A = std::vector<std::vector<T>...>
,其中T
是模板参数的可变列表。我想知道把参数包放在最后一个尖括号的末尾和第一个尖括号的末尾有什么区别。例如:
using B = std::vector<std::vector<T...>>;
这两个都可以编译,但我不知道有什么区别。
谁能解释一下?谢谢。
在包扩展中,...
之前的模式对于包的每个元素都是重复的,因此vector<T>...
表示扩展到vector<T1>, vector<T2>, vector<T3>
,而vector<T...>
表示扩展到vector<T1, T2, T3>
如果参数包只有一个元素,那么它们是相同的,但是考虑参数包有两个元素,那么
std::vector<std::vector<T1>, std::vector<T2>>
和
std::vector<std::vector<T1, T2>>
不一样。第一个不能编译,std::vector
的第二个模板形参必须是分配器类型,而不是vector类型。如果T2
是分配器类型,则第二个将编译。
实例化A<T1, T2, T3>
时,扩展为:
std::vector<std::vector<T1>, std::vector<T2>, std::vector<T3>>
使用相同的模板参数实例化B
,可以得到:
std::vector<std::vector<T1, T2, T3>>
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中用vector填充一个简单的动态数组
- vector.resize()中的分配错误
- 使用std::vector的OpenCL矩阵乘法
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 在某些循环内使用vector.push_back时出现分段错误
- 当vector是tje全局变量时,c++中vector的内存管理
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- std::vector的包装器,使数组的结构看起来像结构的数组
- 呼叫运营商<<临时
- 为什么(-1)%vector::size()总是返回0
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 在C++中将类(带有Vector成员)保存为二进制文件
- 编译器如何区分std::vector的构造函数
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 错误:调用"std::vector<:vector<int>>::p ush_back(std::vector<std::__cxx11::basic_string<
- std::vector::reserve(未知m),我知道m<<;N(通常)并且知道N
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- C++重载<<具有typedef'd std::vector
- std::映射<>或std::vector<>在处理大型标志集时