gpt4 book ai didi

c++ - 在 C++ 中交换列

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:52:56 32 4
gpt4 key购买 nike

我有一个标准矩阵定义为:

std::vector<std::vector<double> > Qe(6,std::vector<double>(6));

和一个 vector v 是:

v{0, 1, 3, 2, 4, 5};

我想交换矩阵 Qe 的第 3 列和第 2 列,如 vector v 中所示。

在 Matlab 中这就像编写 Qe=Qe(:,v); 一样简单

我想知道在 c++ 中是否有除了 for 循环之外的简单方法来执行此操作。

提前致谢。

最佳答案

鉴于您已将其实现为 vector 的 vector ,您可以使用简单的交换:

std::swap(Qe[2], Qe[3]);

这应该具有恒定的复杂性。当然,这将取决于您是将数据视为列优先还是行优先。但是,如果您要经常交换列,则需要安排数据以适应这种情况(即,允许上面的代码工作)。

至于在使用行优先顺序(C++ 常用)时没有 for 循环的情况下完成工作,您可以在技术上消除 for 循环(至少从您的源代码中)使用标准算法代替:

std::for_each(Qe.begin(), Qe.end(), [](std::vector<double> &v) {std::swap(v[2], v[3]); });

虽然这并没有真正改变实际发生的事情——它只是将 for 循环本身隐藏在标准算法中。在这种情况下,我可能更喜欢基于范围的 for 循环:

for (auto &v : Qe) 
std::swap(v[2], v[3]);

...但我从来都不是特别喜欢 std::for_each,当 C++11 添加基于范围的 for 循环时,我认为是大量大多数情况的更好选择,其中std::for_each可能以前是一个合理的可能性(IOW,我从来没有std::for_each 有很多用处,现在几乎看不到了)。

关于c++ - 在 C++ 中交换列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27530009/

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