我希望输出:acej
使用此算法可以正常工作,但是输出结果存在问题,并且此问题导致堆栈溢出。
我如何解决它?
#include <iostream>
#include <vector>
std::vector<char> charAt(std::vector<char> str)
{
std::vector<char> result;
result.resize(str.size());
for (int i = 0; i < str.size(); i++)
{
if (i % 2 == 0)
{
for (int j = 0; j < str.size(); j++)
{
if (result[j] == '\0')
{
result[j] = str[i];
break;
}
}
}
}
return result;
}
std::ostream& operator<<(std::ostream& stream, std::vector<char> vector)
{
stream << "Vector: " << vector << std::endl;
return stream;
}
int main() {
std::vector<char> foo = { 'a', 'b','c','d','e','f','j' };
std::vector<char> bar = charAt(foo);
std::cout << bar << std::endl;
}
最佳答案
让我们仔细看看您的输出运算符:
std::ostream& operator<<(std::ostream& stream, std::vector<char> vector)
{
stream << "Vector: " << vector << std::endl;
return stream;
}
当您输出
std::vector<char>
时会调用它。然后它将输出一个std::vector<char>
,该代码会导致递归调用,依此类推,直到无穷大为止(或直到堆栈溢出)。输出运算符需要对 vector 进行迭代并输出每个元素。
另外,请勿将 vector 按值传递给函数。而是使用常量引用:
std::ostream& operator<<(std::ostream& stream, std::vector<char> const& vector) { ... }
关于c++ - 如何不让我的堆栈溢出?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41803608/