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

Swap one element with all other in vector

我有像这样的向量 v = {1, 0, 1} 我想将每个元素与其他元素交换,并且 return 每次这两个元素被 sawp 时都交换一个向量。对于此示例,解决方案应 be: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 的差异。感谢您的帮助

好像你的代码是正确的,但你的逻辑是错误的。在您想要的结果中,您执行了第一次交换两次,在代码的结果中它只执行了第一次交换一次,我认为这是真正的意图。如果向量是带有键的映射,那么概念化会更容易。例如: v = {一:1,二:0,三:1} v1 = {二:0,一:1,三:1} v2 = {三:1,一:1,二:0}。 或者你可能假设 i 是指向向量中第一个东西的指针,并且它会随着交换移动。这在实现时不起作用,它将继续访问第一个元素,该元素在第一次交换后变为 0。

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

您需要:

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