我在 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/