gpt4 book ai didi

c++11 std::array vs 静态数组 vs std::vector

转载 作者:IT老高 更新时间:2023-10-28 22:24:21 27 4
gpt4 key购买 nike

第一个问题,如果我要为接下来的 3 年开发代码,开始使用 c++11 是不是一件好事?

如果是的话,如果我想将它与 Lapack 一起使用,那么实现矩阵的“最佳”方法是什么?我的意思是,做 std::vector<std::vector< Type > > Matrix不容易与 Lapack 兼容。

到目前为止,我将矩阵存储在 Type* Matrix(new Type[N]) 中(newdelete 的指针形式很重要,因为数组的大小不是像 5 这样的数字,而是作为变量给出)。

但是在 C++11 中可以使用 std::array。据此site ,这个容器似乎是最好的解决方案……你怎么看?

最佳答案

首先,如果您要学习 C++,请学习 C++11。之前的 C++ 标准于 2003 年发布,这意味着它已经有 10 年的历史了。这在 IT 世界中很多。 C++11 技能也将顺利转化为即将推出的 C++1y(很可能是 C++14)标准。

std::vector 之间的主要区别和 std::array是动态(在大小和分配方面)和静态存储。因此,如果您想要一个始终为 4x4 的矩阵类,std::array<float, 4*4>会很好的。

这两个类都提供 .data()成员,它应该产生一个兼容的指针。但是请注意,std::vector<std::vector<float>>不会占用连续的 16*sizeof(float)内存(所以 v[0].data() 不会工作)。如果您需要动态大小的矩阵,请使用单个 vector并将其调整为 width*height大小。

由于对元素的访问会有点困难(v[width * y +x]v[height * x + y]),您可能需要提供一个包装类,允许您按行/列对访问任意字段。

由于您还提到了 C 风格的数组; std::array提供更好的接口(interface)来处理相同类型的存储,因此应该是首选;使用超过 std::array 的静态数组没有任何好处.

关于c++11 std::array vs 静态数组 vs std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18868860/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com