【问题标题】:Instance of 'std::out_of_range' with vector in C++C++ 中带有向量的“std::out_of_range”实例
【发布时间】:2016-03-08 02:51:23
【问题描述】:
  1. 嗨,我最近一直在使用矢量,但似乎当我输入“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;
       }
    

【问题讨论】:

    标签: c++ vector


    【解决方案1】:

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

    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”的字符串,则不需要向量来反转序列并打印。您可以简单地执行以下操作

    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)); 
    

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

    【讨论】:

    • 太好了,你说的很完美,非常感谢。我有一个问题,“assert(!a.empty());”有什么用
    • @DanielRodríguezMeza 如果答案是你想要的,你能接受吗?为此,您必须检查我的答案旁边略显灰色的复选标记。
    • 非常感谢非常感谢,但无法理解“assert(!a.empty());”的用法
    • assert(!a.empty()) 将确保 a 不为空。如果 a 为空,则它变为 assert(!(true)) ,即 assert(false) 失败。 assert 可用于确保不变量和条件成立。在这里查看更多信息:cplusplus.com/reference/cassert/assert
    • @Prith 谢谢你的澄清!
    猜你喜欢
    • 2014-05-24
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 2017-03-08
    相关资源
    最近更新 更多