gpt4 book ai didi

c++ - C++ 中带 vector 的 'std::out_of_range' 实例

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

  1. 你好,我最近一直在使用 vector ,但似乎当我输入“3+2+1”左右时,我的预期输出将是“1+2+3”控制台说:“抛出后终止调用“std::out_of_range”原始问题的一个实例来自:http://www.codeforces.com/problemset/problem/339/A。我的问题是什么?感谢帮助!
  2.   #include <bits/stdc++.h>
    using namespace std;

    int main (){


    ios_base::sync_with_stdio(false);
    cin.tie(NULL);


    vector <int> a;
    string str;
    cin>>str;

    for(int i = 0; i < str.size(); i++){
    if(str[i]!='+')
    {
    int c = str[i]-'0';
    a.push_back(c);
    }
    }

    sort(a.begin(), a.end());
    cout<<a.at(0);
    for(int j = 1; j < str.size(); j++){

    cout<<'+'<<a.at(j);

    }


    return 0;
    }

最佳答案

您需要将循环的停止条件更改为停止在 vector 的大小而不是字符串上。所以将最后一个循环更改为以下内容

for(int j = 1; j < a.size(); j++){
cout<<'+'<<a.at(j);
}

此外,如果您想以您指定的格式打印所有值,您需要执行以下操作

assert(!a.empty());
for(int j = 0; j < a.size() - 1; j++){
cout << a.at(j) << '+';
}
cout << a.back() << endl;

关于您的实现的最后一件事。如果你总是得到一个格式为“a+b+c+d”的字符串,你不需要一个 vector 来反转序列和打印。您可以简单地执行以下操作

std::reverse(str.begin(), str.end()); // #include <algorithm>

然后字符串将具有您想要的序列。如果你不想就地做,需要另一个容器,你可以做

// #include <iterator> and #include <algorithm>
string other_string;
std::copy(str.crbegin(), str.crend(), std::back_inserter(other_string));

^ 这将以相反的顺序将字符串复制到另一个字符串对象。

关于c++ - C++ 中带 vector 的 'std::out_of_range' 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35858031/

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