C++ 向量操作

Posted

技术标签:

【中文标题】C++ 向量操作【英文标题】:c++ vector manipulation 【发布时间】: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() ?使用可用的算法。 【参考方案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;

【讨论】:

以上是关于C++ 向量操作的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中操作向量时出现分段错误

合并排序的合并操作不使用 C++ 向量

在 C++ 中对自定义对象的向量进行操作 [关闭]

C++ 轴对齐矩形操作向量和字符串

使用 C++ void 函数操作向量数组

关于C++中的二维向量