我目前使用std::vector<std::vector<std::string> > MyStringArray
但是我在这里已经阅读了一些关于SO的评论,这些评论不建议出于效率的考虑而使用嵌套 vector 。
不幸的是,在这种情况下,我还没有看到替代嵌套 vector 的示例。
最佳答案
这是一个简单的动态2D数组,具有可在运行时配置的列号:
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的2D动态数组的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6920621/