【发布时间】:2021-08-28 07:55:40
【问题描述】:
我正在寻找与 C++ 中的 .NET 固定大小数组等效的东西,但通过谷歌搜索找到此信息时遇到了真正的麻烦。 std::array 通过将长度直接嵌入到其类型中来模仿 Pascal。 std::vector 很好,但在堆栈上传递了大约 3 个指针,我只希望其中一个。
也不是基于迭代器的数组,因为我正在为 functional language 开发 C++ 后端,我希望它是基于大小的,以便与 .NET 和 Cython 后端中的数组匹配。
我应该实现自己的数组类吗?
编辑:我要求的是作为库的一部分的灵活数组(例如this one)。
【问题讨论】:
-
“堆栈上大约有 3 个指针”是什么意思? Vector 通常确实有三个指针,但你不能像那样 memcpy 它。您通常会通过引用传递它,这通常实现为指针。
-
三个指针与否,你不要传递它们。您可以创建一个副本,其中涉及重复动态分配和复制每个元素,因此三个指针在那里不是问题。或者,你通过引用传递,相当于一个指针。
-
好的,所以你的问题标题有点误导。人们阅读“固定大小”,但您的意思不是“在编译时固定”,而是“在执行期间分配后固定”。使用 std::vector,可能是动态分配的。滚动自己的容器很乏味,而且好处令人怀疑。先把它弄对,然后以基准和测试为基础,优化它。
-
根据到目前为止的 cmets,很好的猜测是这个问题应该更好地解释功能需求。目前,该问题使用六个词(“相当于 .NET 固定大小数组”)来描述功能要求,然后再深入探讨为什么某些选择不起作用。要求的字数与取消选项的字数之比可能应该颠倒过来。
-
从您的问题和迄今为止的所有 cmets 来看,您似乎对 C++ 有一些误解。首先,注意给出的建议,使用
std::vector。然后了解 C++ 的基础知识,尤其是按值和按引用(或作为指针)传递参数。