【问题标题】:Swap one element with all other in vector将一个元素与向量中的所有其他元素交换
【发布时间】:2016-04-26 21:53:29
【问题描述】:

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

【问题讨论】:

  • 您的问题不清楚。向量中有三个项目。你要交换哪些物品?你什么时候交换它们?你的“错误”答案和你的“正确”答案一样有意义。
  • 我首先获取第一个元素并将其与所有其他元素交换,例如 i = 0, j = 1 我交换元素 swap(tempSol[0], tempSol[1])
  • 您在寻找std::next_permutation吗? (en.cppreference.com/w/cpp/algorithm/next_permutation)
  • 为什么您的结果应该是您发布的结果,而不是实际得到的结果?描述将导致您想要的解决方案的步骤。
  • 鉴于此,您真正想解决什么问题?所有这些交换都必须有一个目的。到目前为止,我完全不明白你的描述——这可能是X-Y Problem 的一个例子

标签: c++ vector swap


【解决方案1】:

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

你需要:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 结果应该是这样的:v1 = {二:2,一:1,三:3},v2 = {三:3,二:2,一:1},v3 = {一:1,三:3,二:2}
    猜你喜欢
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    相关资源
    最近更新 更多