gpt4 book ai didi

c++ - 如何在 while 循环中使用 .erase()?

转载 作者:行者123 更新时间:2023-11-30 05:08:24 25 4
gpt4 key购买 nike

背景:这是一个程序,用于将存储在 vector 中的数字逐位加 1。

前面有 0 的数字可以作为输入,但不能作为输出。例如:0123 和 123 都是有效输入 但 0124 是无效输出 而 124 是有效输出

问题:我想使用 erase() 删除输出 vector 前面的 0,直到使用代码底部的 while 循环找到非零值。但是编译器返回一个垃圾值。另一个在线编译器给出了段错误。在没有 while 循环的情况下编译时,其余代码工作正常。

#include <iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> A = { 9, 9, 9 };
A.insert(A.begin(), 0); /*--last carry may nonzero so new digit -*/
vector<int>::reverse_iterator it;
int c = 1;
for (it = A.rbegin(); it != A.rend(); it++) /*----finds and adds carry---*/
{
int d = *it;
d = d + c;
c = d / 10;
if (c == 0)
*it = d;
else
{
d = d % 10;
*it = d;
}

}
vector<int>::iterator iss;
iss = A.begin();

问题循环开始

    while (*iss == 0) /*----------------problem----------------*/
{
iss = A.erase(iss);
}

循环结束

    for (int i = 0; i < A.size(); i++)
{
cout << A[i];
}
}

最佳答案

你写的几乎是正确的。应该对结束迭代器进行额外检查。

while(iss != A.end() && *iss == 0) {
iss = A.erase(iss);
}

但是,可以实现它,使算法具有更好的性能:

while(iss != A.end() && *iss == 0) {
++iss;
}
A.erase(A.begin(), iss);

关于c++ - 如何在 while 循环中使用 .erase()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46867496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com