可变长度数组的数组

时间:2014-07-15 12:59:04

标签: c++ arrays

通常情况下,我们可以这样写:

const char* names1[] = { "Stack", "LongerThanStack" };
const char* names2[] = { "Overflow", "LongerThanOverflow", "O" };

如何制作包含上述两个数组的新数组names

二维数组应该这样做。 我尝试了以下代码,但由于内部数组的长度可变,G++不接受它。

const char* names[2][] = {{ "Stack", "LongerThanStack" }, 
                    { "Overflow", "LongerThanOverflow", "O" }};

3 个答案:

答案 0 :(得分:7)

除非你迫切需要,否则就这样做:

std::vector<std::vector<std::string>> names = {{ "Stack", "LongerThanStack", "S" }, { "Overflow", "LongerThanOverflow", "O" }};

答案 1 :(得分:2)

除第一个数组外,每个数组维度必须在多维数组中具有边界。有效代码:

char* names[][3] = {{ "Stack", "LongerThanStack", "S" }, 
                    { "Overflow", "LongerThanOverflow", "O" }};

但请考虑使用STL lib中的容器,例如ArrayVector

答案 2 :(得分:1)

如果你正在使用C ++,最好使用矢量
1 - 与C阵列一样快(当然不考虑调整大小,即使这样,如果总是更好地实现自己)。
2-内存管理(自动,测试,稳定),插入以摊销的常数时间O(1) 3-Security(绑定检查,调试检查,使用为你的ex:at(...)执行此操作的方法的可能性)
4-Iterators(使用STL的可能性),使用算法时的性能 5-Performance(缓存友好,连续)
6-要使用的默认容器。

C ++ 11改进了向量的各种问题,如果真正改进的那么初始化

std::vector<std::vector<std::string>> names {{"1", "2"}, {"11", "22", "333"}, ... };

如果在C ++ 11中需要静态大小数组,则添加了std :: array。