c++ - C++和STL都不包含多维数组的原因是什么?

标签 c++ stl containers

<分区>

我理解他们缺乏 C:可以将多维数组模拟为数组的数组而没有开销。但是,在 C++ 容器中,例如 vector不太适合那个。虽然可以,而且(唉)通常会做类似 vector< vector< double > > 的事情,这样的结构可能会导致:

(1) 维护问题,如不保证所有内部vector s 大小相同;

(2) 显着的内存开销,例如内部 vector 大小和数据指针的多个实例;

(3) 显着的性能缺陷,由于行之间缺乏空间对齐以及每行必须多做一次非必需的间接内存访问。

为什么要让每个开发人员都自己编写代码来重新发明轮子 gridmatrix

最佳答案

虽然它很少被使用(而且我当然不推荐它),但该标准确实包括一些直接支持使用至少像多维数组一样的东西。

这里的一个问题是所包含的支持仅适用于 std::valarray,不适用于 std::vector。另一个问题是该功能的大多数文档都相当少,因此通常很难理解所提供的实际上是多维数组功能。另一个问题是,使用 vallarray(以及几乎所有相关的东西)充其量往往有点笨拙——每隔一段时间你就会遇到奇怪的限制,表明它从来都不是真正的完成。

尽管如此,是的,std::slicestd::gslice 提供了(例如)寻址 3D 数组的列的能力。

关于c++ - C++和STL都不包含多维数组的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34344875/

相关文章:

c++ - std::bind 分配给 std::function

C++ 无序映射常量时间访问?

c++ - 如何用容器列表实现功能

windows - 在 Windows 容器上的 docker 上运行非常慢

c++ - 可变参数扩展可以用作逗号运算符调用链吗?

C++ - 使用指向成员函数的函数指针的问题

c++ - 在从全局对象调用的静态库函数中使用 std::vector 时调试断言失败

c++ - 为什么 type_info 在命名空间 std 之外声明?

c++ - 什么是用于索引访问的良好未定义大小数据结构?

c++ - 替换字符串数组中所有出现的字母