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

时间:2016-04-26 21:53:29

标签: c++ vector swap

我有这样的向量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的差异。谢谢你的帮助

2 个答案:

答案 0 :(得分:0)

好像你的代码是正确的,但你的逻辑是关闭的。在你想要的结果中,你执行第一次交换两次,在代码的结果中它只进行第一次交换,我认为这是真正的意图。如果向量是带有键的映射,则更容易概念化。例如: v = {one:1,two:0,3:1} v1 = {two:0,one:1,3:1} v2 = {three:1,one:1,two:0}。 或者你可能认为我会指向向量中的第一个东西并且它会随着交换而移动。这不会像实现的那样工作,它将继续访问第一个在第一次交换后变为0的元素。

答案 1 :(得分:0)

您的问题源于您正在改变原始向量的事实,因此稍后您将交换已经交换的值。

你需要:

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