【发布时间】:2020-10-19 21:37:40
【问题描述】:
这不能编译:
vector<int[2]> v;
int p[2] = {1, 2};
v.push_back(p); //< compile error here
还有什么选择? 我不想使用std::array。
std::vector 本身的声明会编译。无法编译的是 push_back。
【问题讨论】:
-
数组是旧时代的愚蠢的人工制品。它们不能在没有帮助的情况下被复制、分配或移动,
vector做了很多所有这些操作。考虑使用std::array而不是普通的旧数组。std::array聪明多了。 -
噢。如果没有
std:: array,你可以使用std::pair,但这太笨拙了。您还可以围绕可以复制、分配和移动的数组创建自己的结构,但此时您刚刚重新制作了std::array。拥有两个int成员的简单结构可能更容易(基本上是std::pair,但您可以为成员提供描述性名称).. -
对
std::array的反感是什么?似乎是解决问题最直接的方法。对于潜在的回答者来说,了解为什么明显的选择被拒绝可能会很有用。 -
我不想使用
std::array。为什么?这本身就是一个愚蠢的要求(如果你的作业没有提供它,不想并不表示)。 -
这是一个有点傻的选择:根本不存储数组。只需存储两倍数量的
ints 并在访问时将索引翻倍以获得“数组”的第一个元素的位置..
标签: c++ arrays stdvector push-back