我希望输出:
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/

10-11 00:43