使用某些数据结构时,C++ 代码不会在 Visual Studio 代码中输出

C++ Code doesn't output in Visual Studio Code when certain data structures are used

我 运行 在 Visual Studio 代码中遇到了一个奇怪的错误 - 我正在使用标准扩展(C/C++ 扩展包)在 C++ 中编写代码,如果我写像这样一个简单的程序,它运行良好:


int main() {
    #ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif

    cout << "Hello World!" << endl;
}

但是,第二次我使用 STD include 语句声明一个变量,例如 mapvector 等,代码运行没有错误,但不打印任何内容。

int main() {
    #ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif

    vector<int> test;
    cout << "Hello World!" << endl; // this no longer prints
}

知道为什么会出现此错误吗?我也有我需要的所有包含语句:

#include <bits/stdc++.h>  
#include <complex>
#include <queue>
#include <set>
#include <unordered_set>
#include <list>
#include <chrono>
#include <random>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <string>
#include <vector>
#include <map>
#include <unordered_map>
#include <stack>
#include <iomanip>
#include <fstream>

using namespace std;

我测试了您的代码,运行 符合预期。

一些想法:

  • ONLINE_JUDGE 未定义时,freopen("output.txt", "w", stdout); 使输出重定向到 output.txt。也许您第二次 运行 您的程序时忘记检查文件而不是控制台。
  • 此外,由于您使用的是 Visual Studio 代码,可能您使用了 运行 程序的扩展。该扩展程序可能不会使用您当前的工作目录来 运行 程序,这使得 output.txt 别处。另外,检查 ONLINE_JUDGE 是否由扩展程序或您的脚本设置。

顺便说一句,如果你使用 g++,#include <bits/stdc++.h> 将包含标准库的所有头文件,不需要包含其他头文件。但是这样做会大大增加你的编译时间。