c++ - 在 C++ 中获取二维 vector 的行 vector

标签 c++ vector

我在 C++ 中定义了一个 vector vector :vector < vector<double> > A;

假设 A 已经填充了一些值。有没有快速的方法从 A 中提取行 vector ?

例如,A[0]会给我第一个列 vector ,但我怎样才能快速得到第一个行 vector ?

最佳答案

该数据结构没有“快速”方法,您必须迭代每个列 vector 并获取所需行的值并将其添加到临时行 vector 。这对你来说是否足够快取决于你需要什么。为了使其尽可能快,请务必在目标行 vector 中分配适量的空间,以便在向其添加值时无需调整其大小。

性能问题的简单解决方案是使用一些现有的矩阵库,例如评论中建议的 Eigen。

如果您需要自己执行此操作(因为它是作业,或因为许可问题,或其他原因),您可能应该创建自己的“Matrix 2D”类,并在其中隐藏实现细节。然后,根据您的具体需要,您可以采用以下技巧:

  • 有一个行的“缓存”,所以如果同一行被多次获取,它可以从缓存中获取,而不需要创建一个新的 vector
  • 将数据存储为行 vector 的 vector 和列 vector 的 vector ,因此您可以在恒定时间获取行或列,但代价是使用更多内存并由于数据重复而使更改成本翻倍<
  • 根据当前需要动态改变内部表示,所以你得到固定的内存使用量,但是当你需要改变内部表示时需要付出处理成本
  • 将数据存储在平面 vector 中,大小为行*列,并在您自己的代码中根据行和列计算正确的偏移量

但值得重复:有人已经为您完成了此操作,因此如果可以,请尝试使用现有的库...

关于c++ - 在 C++ 中获取二维 vector 的行 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55044194/

相关文章:

c++ - skipper 在 boost::spirit 中不起作用

c++ - 我如何让 Anjuta 突出显示我的构建系统 (waf) 产生的错误/行?

c++ - ACE框架查询

c++ - 如何在一行中用 C++11 初始化一个包含 n 个相等元素的 vector ?

c++ - 如何使用 vector 来存储形状?

c++ - GUI 和文本模式 C++ 设计以消除冗余(可选参数?函数重载?)

C++、ANTLR 和 VECTORS

C++ vector 语法错误

c++ - 正确返回 vector 引用

c++ - 合并排序中 C++ vector 中的 std::bad_alloc 错误