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

丹尼尔·罗德里格斯·梅萨(Daniel Rodriguez Meza)
  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;
       }
    
好奇的

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在C ++中抛出'std :: out_of_range'实例后调用终止

C++ 捕获错误“抛出'std::out_of_range'的实例”

c++ 在抛出'std::out_of_range' std::vector 的实例后调用终止

C ++向量:std :: out_of_range错误

抛出'std :: out_of_range'实例后调用终止

C++ 合并排序实现中抛出的 std::out_of_range 异常

抛出'std :: out_of_range'what():vector :: _ M_range_check实例后终止调用

std :: out_of_range:Mergesort算法中的向量异常

合并排序算法中的 C++“以未捕获的 std::out_of_range 类型异常终止:向量”错误

"if (argc < 2 || argc > 2)" 应该有 2 个参数吗?& 在抛出“std::out_of_range”错误实例后调用终止

在抛出 'std::out_of_range' what() 实例后调用终止:basic_string::at: __n 错误

C ++:未处理的异常:内存位置处的std :: out_of_range

比较二进制数字输入的字符时,抛出'std :: out_of_range实例后调用终止

将字母向前移动 3 个字母的程序,错误:在抛出 'std::out_of_range' 实例后调用终止

std :: stod抛出应为有效字符串的out_of_range错误

异常'out_of_range'不是std的成员?

不会引发std :: out_of_range异常

std :: stoi,std :: setbase和std :: out_of_range错误

错误test.exe中0x76C9FD62的未处理异常:Microsoft C ++异常:内存位置0x006FF870的std :: out_of_range。发生了

为什么“在抛出一个 'std::out_of_range' what(): basic_string::at: __n (which is 0) >= this->size() (which is 0) 实例后终止调用?

Mini-Project.exe中0x77031D4D的未处理异常:Microsoft C ++异常:内存位置0x00CFF620的std :: out_of_range

std :: stoul不会抛出std :: out_of_range

从 Hex 到 Dual 的转换总是导致内存位置处的 std::out_of_range

引发std :: out_of_range异常。“预期的类型说明符”

访问未初始化的元素时,std向量不会引发out_of_range异常

使用相同函数时意外收到“std::out_of_range”错误

以类型为std :: out_of_range的未捕获异常终止终止错误

使用gcc编译代码后,不会输出std :: out_of_range异常字符串

錯誤:在拋出 'std::out_of_range 的實例後調用終止