#include <iostream>
#include <vector>
using namespace std;
void insert(vector<int> &vec, int newEle)
{
int i = vec.size() - 1;
while (vec[i] > newEle)
{
cout << vec[i] << endl;
vec[i + 1] = vec[i];
i--;
}
vec[i + 1] = newEle;
}
void display(vector<int> &vec)
{
for (int i = 0; i < vec.size(); i++)
{
cout << vec[i] << " ";
}
}
int main()
{
vector<int> vect{4, 8, 13, 16, 20, 25, 28, 33};
insert(vect, 18);
display(vect);
// cout << endl;
// insert(vect, 11);
// display(vect);
return 0;
}
元素已正确插入,但打印的元素少了一个。
输出是 4 8 13 16 18 20 25 28,缺少 33
任何人都可以帮忙做什么吗?我被困住了
在第一次迭代中,
i
等于vec.size() - 1
。那么您就不能执行 vec[i + 1] = vec[i]
,因为您本质上是在访问 vec[vec.size()]
,这是越界的,因此是未定义的行为。
此外,在第二次迭代中,
i
等于vec.size() - 2
。然后你就在做vec[i + 1] = vec[i]
,相当于vec[vec.size() - 1] = vec[vec.size() - 2]
。您正在丢弃 vec
的最后一个元素,因为您正在用 vec[vec.size() - 2]
的值覆盖它,因此您将丢失最后一个值。
更一般地说,
operator[]
不会更改向量的大小,因此您尝试插入一个值而不增加向量的大小来存储额外的值。这不行。
您可以使用
vector::insert
修复此问题:
while (vec[i] > newEle)
{
cout << vec[i] << endl;
i--;
}
vec.insert(vec.begin() + i + 1, newEle);
更多关于
vector::insert
:https://en.cppreference.com/w/cpp/container/vector/insert