gpt4 book ai didi

c++ - 在内存中操作 std::strings 的二维动态数组的最有效方法是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:36:35 25 4
gpt4 key购买 nike

我目前使用

std::vector<std::vector<std::string> > MyStringArray

但是我在这里阅读了一些关于 SO 的评论,这些评论不鼓励以效率为由使用嵌套 vector 。
不幸的是,对于这种情况,我还没有看到嵌套 vector 的替代示例。

最佳答案

这是一个带有运行时可配置列号的简单动态二维数组:

class TwoDArray
{
size_t NCols;
std::vector<std::string> data;

public:
explicit TwoDArray(size_t n) : NCols(n) { }

std::string & operator()(size_t i, size_t j) { return data[i * NCols + j]; }
const std::string & operator()(size_t i, size_t j) const { return data[i * NCols + j]; }

void set_number_of_rows(size_t r) { data.resize(NCols * r); }

void add_row(const std::vector<std::string> & row)
{
assert(row.size() == NCols);
data.insert(data.end(), row.begin(), row.end());
}
};

用法:

TwoDArray arr(5); // five columns per row
arr.set_number_of_rows(20);
arr(0, 3) = "hello";
arr(17,2) = "world";

这只是一个完全任意和随机的例子。您的真实类显然必须包含适合您正在做的事情的接口(interface)方法;或者您可能决定根本不使用包装类并直接处理裸 vector 。

关键特征是通过 (i,j) 的二维访问器运算符,它取代了嵌套 vector 的 [i][j]

关于c++ - 在内存中操作 std::strings 的二维动态数组的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6920621/

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