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);
}
我目前有这段代码可以进行冒泡排序:
#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);
}