C++矢量超出范围异常
C++ vector out of range exception
我正在编写一个基于命令进行计算的程序,但我在向量的范围方面遇到了一点问题。
基本上,我将整数输入到一个向量中,一个整数序列,每个整数都在新行上,例如,如果我输入命令"sum",它会得到向量的最后两个元素(整数序列(对它们求和,将它们从序列中删除并将新数字添加到序列中。
例:
1 2 4 5 和 结束(此命令结束我的程序(
输出: 1 2 9
这是代码:
#include "stdafx.h"
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#define CONSOLE_LOG(x) std::cout << x
#define COMMAND_END command[0]
#define COMMAND_SUM command[1]
#define COMMAND_SUBTRACT command[2]
#define COMMAND_CONCAT command[3]
#define COMMAND_DISCARD command[4]
#define COMMAND_DISPSEQ command[5]
std::string sum(std::string& x, std::string& y, std::vector<std::string>& vec)
{
int xInt = atoi(x.c_str());
int yInt = atoi(y.c_str());
int result = xInt + yInt;
std::ostringstream os;
std::string strResult;
os << result;
strResult = os.str();
vec.erase(vec.end() - 1);
vec.erase(vec.end() - 1);
return strResult;
}
/*
std::string subtract(std::string& x, std::string& y)
{
}
std::string concat(std::string& x, std::string& y)
{
}
std::string discard(std::string& x, std::string& y)
{
}
*/
void dispseq(std::vector<std::string>& vec)
{
std::vector<std::string>::const_iterator iter;
for (iter = vec.begin(); iter != vec.end(); iter++)
{
std::cout << *iter << std::endl;
}
}
void enterSequence()
{
std::vector<std::string> command =
{
"end",
"sum",
"subtract",
"concat",
"discard",
"dispseq"
};
std::vector<std::string> sequence;
std::string input;
std::string a = sequence[sequence.size() - 1];
std::string b = sequence[sequence.size() - 2];
do
{
std::cin >> input;
sequence.emplace_back(input);
if (input == COMMAND_END)
{
sequence.erase(sequence.end() - 1);
}
if (input == COMMAND_SUM)
{
sequence.emplace_back(sum(a, b, sequence));
}
dispseq(sequence);
} while (input != COMMAND_END);
}
int main()
{
enterSequence();
std::cin.get(); std::cin.get();
return 0;
}
这是我的问题。当然,我需要定义向量的最后两个元素,我用
std::string a = sequence[sequence.size() - 1];
std::string b = sequence[sequence.size() - 2];
但它给了我一个例外,并告诉我我超出了范围。我想我不应该传递一个矢量的大小,它仍然没有一个。 那我该怎么写呢?
a
和b
正在初始化为向量的负索引。您可以通过修改 do-while 循环来解决此问题。
std::string a;
std::string b;
do
{
if(sequence.size() >= 2)
{
b = sequence[sequence.size() - 2];
a = sequence[sequence.size() - 1];
}
else if(sequence.size() >= 1)
{
a = sequence[sequence.size() - 1]
}
std::cin >> input;
sequence.emplace_back(input);
if (input == COMMAND_END)
{
sequence.erase(sequence.end() - 1);
}
if (input == COMMAND_SUM)
{
sequence.emplace_back(sum(a, b, sequence));
}
dispseq(sequence);
} while (input != COMMAND_END);
相关文章:
- 关于:C++中异常对象的范围:为什么我没有得到副本?
- 为什么这个正则表达式C++在括号表达式中抛出无效范围异常?
- C++矢量超出范围异常
- 张量不会在超出范围索引时引发异常
- 如果一个对象是在本地创建的,并在C++中作为异常抛出,那么本地对象如何在其范围之外有效,即在 catch 块中?
- basic_string::替换的超出范围异常,而在范围内,正如调试相同参数的输出所证明的那样
- 当数字可能超出C++中特定数据类型的范围时如何处理异常?
- 程序崩溃,说向量不超出范围异常
- Windows 错误报告和超出范围的异常
- 对象在超出范围时是否被销毁,因为它们已引发异常.C++
- 从覆盖范围报告中删除自动生成的异常代码
- C++ 超出范围异常
- 为什么在 std::vector 中使用索引超出范围的运算符 [] 时没有出现异常?
- 为什么这会导致超出范围的异常
- 用于处理超出范围错误的异常类 - C++
- 当传递表示负值的十六进制时,C++stoll抛出超出范围的异常
- 字符串长度为10或更长的c++stol抛出范围外异常
- C++:如果抛出异常,那么超出范围的对象将被销毁
- 给定范围内的完美平方:循环执行异常
- 通过引用捕获(使用 catch)时异常对象的范围