带有C ++向量的'std :: out_of_range'实例

时间:2016-03-08 02:51:23

标签: c++ vector

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

1 个答案:

答案 0 :(得分: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>

然后字符串将具有您想要的序列。如果您不想这样做并且需要另一个容器,那么<​​/ p>

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

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