You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何cout无法输出vector<string>内容?我的FizzBuzz代码无任何输出

问题分析与修复方案

核心问题1:空指针调用成员函数

你声明了MyClass* ptr1 = nullptr;,这是一个空指针,没有指向任何MyClass的实例。直接通过空指针调用成员函数fizz_buzz属于未定义行为,程序可能无输出甚至崩溃。

修复方法:

  • 用栈上实例(更简单):
    MyClass my_class;
    const auto v1 = my_class.fizz_buzz(100);
    
  • 或用堆上实例(需正确初始化):
    MyClass* ptr1 = new MyClass();
    const auto v1 = ptr1->fizz_buzz(100);
    // 打印逻辑
    delete ptr1;
    

核心问题2:vector插入顺序错误

你一开始获取了v1.begin()的迭代器it,每次向这个位置插入元素。但vector插入元素到开头时,原迭代器会失效,且最终容器内容是倒序的(比如先插1,再插2到开头,结果是2,1),和期望的正序输出相反。

修复方法:改用push_back向容器末尾添加元素,保证顺序正确:

vector<string> fizz_buzz (const int max) {
    vector<string> v1;

    for (int i = 1; i <= max; i++) {
        if (i % 5 == 0 && i % 3 == 0) {
            v1.push_back("FizzBuzz!");
        } else if (i % 5 == 0) {
            v1.push_back("Buzz");
        } else if (i % 3 == 0) {
            v1.push_back("Fizz");
        } else {
            v1.push_back(to_string(i));
        }
    }
    return v1;
}

额外注意:成员函数访问权限

MyClass的fizz_buzz函数默认是私有(private)的,必须改为public才能在main中调用,否则编译会报错。

完整修复代码

#include <iostream>
#include <vector>
#include <string>

using namespace std;

class MyClass {
public:
    vector<string> fizz_buzz (const int max) {
        vector<string> v1;

        for (int i = 1; i <= max; i++) {
            if (i % 5 == 0 && i % 3 == 0) {
                v1.push_back("FizzBuzz!");
            } else if (i % 5 == 0) {
                v1.push_back("Buzz");
            } else if (i % 3 == 0) {
                v1.push_back("Fizz");
            } else {
                v1.push_back(to_string(i));
            }
        }
        return v1;
    }
};

int main() {
    MyClass my_class;
    const auto v1 = my_class.fizz_buzz(100);
    for (const string &s : v1) {
        cout << s << "\n";
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者Younes Mdarhri Alaoui

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 23:35:13