C++ 如何从向量中删除 -1?

C++ How can I delete -1 from my vector?

我目前有这段代码可以进行冒泡排序:

#include <iostream>
#include <vector>
using namespace std;

void bubbleSort(vector<int>& numbers){
    bool notFin = true;
    int temp = 0;
    while(notFin){
        notFin = false;
        for (int i = 0; i< numbers.size(); i++) {
            if (numbers[i]>numbers[i+1] ){
                temp = numbers[i];
                numbers[i] = numbers[i+1];
                numbers[i+1] = temp;
                notFin = true;
            }
        }
    }
}

void printVector(vector<int>& numbers){
    for (int i=0;  i<numbers.size();  i++) {
        cout<<numbers[i]<<" ";
    }
  cout<<endl;
}

int main() {
    vector<int> numbers;
    int n = 0;

    cout << "enter integers to bubble sort end with -1\n";
    while (n != -1) {
        cin >> n;
        numbers.push_back(n);
    }
    numbers.pop_back();

    printVector(numbers);
    bubbleSort(numbers);
    printVector(numbers);
}

然而当我输出结果时,我仍然在前面看到 -1 并且最高值消失了。如何从向量中删除-1,使其在第二次打印后不输出并推出向量中的最大值?

您正在访问矢量外部。当您到达 bubbleSort()for 循环的最后一次迭代时,numbers[i] 是向量的最后一个元素,而 numbers[i+1] 在外面。这会导致未定义的行为,在您的情况下,它恰好访问了您最初放入向量然后弹出的 -1

更改循环以使用 i < numbers.size()-1 作为重复测试。

您还可以修复输入循环,这样一开始就不会将 -1 放入向量中。

while (cin >> n && n != -1) {
    numbers.push_back(n);
}