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 << highestpos << '\n';
(使用max_element()
而不是手写循环来确定最大值和vector1.erase()
从向量中删除也可能会有所帮助,尽管擦除可能确实比swap+pop_back效率低)
【讨论】:
这具有 O(N) 复杂性,而 OP 尝试的方法将具有 O(1) 复杂性。【参考方案2】: int highestpos = i;
您只是在循环内定义了一个变量。它不会改变循环外变量的值。改为:
highestpos = i;
【讨论】:
以上是关于C++ 向量操作的主要内容,如果未能解决你的问题,请参考以下文章