gpt4 book ai didi

c++ - 可调整大小和动态二维数组的更好解决方案

转载 作者:太空宇宙 更新时间:2023-11-04 13:20:44 25 4
gpt4 key购买 nike

嗨,我必须创建一个动态二维 vector 。作为二维我认为最好不要使用 boost.MultiArray 来提高效率(大于 2 维的句柄 vector 的开销)。我的数据结构必须在运行时更改行维度,而列大小是固定的,即是两个。

我是这样想的:

vector<vector<unsigned int> > grid;//declaration
vector<unsigned int> row(2);
grid.push_back(row);//copy vector row and insert in grid

我的问题是: 这是实现我的意图的好方法吗?我认为那是低效的,昂贵的。当我调用 push_back 时会发生什么?还是有我忽略的更好方法?而且,是否有可能在声明中指定内部 vector 的大小为二?(编译器是c++11)

最佳答案

你绝对应该避免 vector 中的 vector ——它会把你的数据分散到整个内存中。它不仅会占用比您需要的更多的内存,而且当您尝试使用数据时还会遇到缓存局部性问题。

您只需要一个简单的数据类型,例如 std::arraystd::pairstd::tuple例如

std::vector< std::array< int, 2 > > grid;
grid.push_back( { 5, 3 } );

至于调整 vector 的大小,那总是会发生的。但成本是摊销的线性时间(即它确实需要定期重新分配和复制,但随着大小呈指数增长,这种情况发生的频率呈指数下降)。

如果您确实知道您可能需要多少元素,您可以通过使用 std::vector::reserve 避免不必要的预先调整大小。

关于c++ - 可调整大小和动态二维数组的更好解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35399923/

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