将一个元素与矢量中的所有其他元素交换

Swap one element with all other in vector

本文关键字:元素 交换 其他 一个      更新时间:2023-10-16

我有这样的向量 v = {1, 0, 1} 我想将每个元素与其他元素交换,并在每次锯两个元素时返回一个向量。对于此示例,解决方案应为:v1 = {0, 1, 1}, v2 = {1, 0, 1}, v3 = {1, 0, 1}。我确实喜欢他的,但我得到相同的结果:

for (size_t i = 0; i < tempSol.size() - 1; ++i) {
    for (size_t j = i + 1; j < solution.size(); ++j) {
            swap(tempSol[i], tempSol[j]); 
            listSolution.push_back(tempSol);
    }
}
结果是:v1 = {0, 1, 1} , v2 = {1, 1, 0},

v3= {1, 0, 1} 向量 v2 的差值。感谢您的帮助

你的问题源于你正在改变你的原始向量,所以稍后你交换已经交换的值。

您需要:

  1. 在每次迭代时复制矢量。
  2. 在该副本上进行交换。
  3. 将(或者更好的是,移动)突变的副本添加到您的列表中。

看起来你的代码是正确的,但你的逻辑是错误的。 在您想要的结果中,您执行第一次交换两次,在代码的结果中,它只执行第一次交换一次,我认为这是真正的意图。 如果矢量是带有键的地图,则更容易概念化。 例如:v = {一: 1, 二: 0, 三: 1} v1 = {二: 0, 一: 1, 三: 1} v2 = {三: 1, 一: 1, 二: 0}.或者,也许您认为我将是指向向量中第一件事的指针,并且它会随着交换而移动。 这在实现时不起作用,它将继续访问第一个元素,该元素在第一次交换后将变为 0。