【问题标题】:c++ vector manipulationC++ 向量操作
【发布时间】:2011-06-03 14:00:59
【问题描述】:

我正在尝试删除向量中最大的 int 元素并将其插入到新向量中。我已经有一个表示向量中最高数字的 int 和一个表示该数字位置的 int。

这是我的代码:

vector2.push_back(highest);
vector1[highestpos] = vector1[vector1.size()-1];
vector1[vector1.size()-1] = highest;
vector1.pop_back();

但它返回一个错误。这段代码有什么问题吗?

编辑::::::这里有更多我的代码。我得到的错误是一个断言错误,说向量下标超出范围。

while(vector1.size() > 0)
{
highest = 0;

   for (int i = 0; i < vector1.size(); i++)
  {

      if (vector1[i] > highest)
       {
           highest = vector1[i];
           int highestpos = i;
       }
  }

      vector2.push_back(highest);
      vector1[highestpos] = vector1[vector1.size()-1];
      vector1[vector1.size()-1] = highest;
      vector1.pop_back();
}

【问题讨论】:

  • it returns an error 可能意味着很多事情。编译器错误?运行时错误?什么是编译器或运行时错误?
  • 好像少了一堆代码。
  • 我没有发现任何问题...可能是highestpos。确保在vector1.size() == 0 时不执行该代码
  • 错误是什么?你确定highestpos 是正确的吗?此外,您不需要将highest 放入vector1 中,这样您就可以再次将其弹出。只需将原始值保留在那里即可。
  • 你为什么不使用 max_element() ?使用可用的算法。

标签: c++ vector


【解决方案1】:

根据编辑,问题在于循环内的highestpos(分配了i 的值)与循环外的highestpos 不同。

vector1[highestpos] = ... 之前尝试std::cout &lt;&lt; highestpos &lt;&lt; '\n';

(使用max_element()而不是手写循环来确定最大值和vector1.erase()从向量中删除也可能会有所帮助,尽管擦除可能确实比swap+pop_back效率低)

【讨论】:

  • 这具有 O(N) 复杂性,而 OP 尝试的方法将具有 O(1) 复杂性。
【解决方案2】:
 int highestpos = i;

您只是在循环内定义了一个变量。它不会改变循环外变量的值。改为:

 highestpos = i;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 2011-11-10
    • 2012-01-07
    • 1970-01-01
    • 2015-07-30
    • 2021-05-31
    • 1970-01-01
    相关资源
    最近更新 更多