我目前使用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/

10-12 00:12
查看更多