C++ 中带有向量的“std::out_of_range”实例

Posted

技术标签:

【中文标题】C++ 中带有向量的“std::out_of_range”实例【英文标题】:Instance of 'std::out_of_range' with vector in C++ 【发布时间】:2016-03-08 02:51:23 【问题描述】:
    嗨,我最近一直在使用矢量,但似乎当我输入“3+2+1”左右时,我的预期输出将是“1+2+3”控制台说:“在抛出后调用终止'std::out_of_range' 原始问题的一个实例来自:http://www.codeforces.com/problemset/problem/339/A。我的问题是什么?谢谢帮助!
      #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】:

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

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 谢谢你的澄清!

以上是关于C++ 中带有向量的“std::out_of_range”实例的主要内容,如果未能解决你的问题,请参考以下文章

C++ 中带有 const 参数的 std::variant

C# 中带 SIMD 的 2x2 矩阵向量积

在 C++ 中带有子句和函数的 oracle 的 OTL 问题

C++中带括号的数组对象的初始化

C++ 中带线程的时钟函数

虚幻引擎 4 (ue4) 中带有自定义 c++ 蓝图函数库的蓝图循环/for/while 节点