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

VSCode中向vector推入std::pair时出现‘expected expression’错误的修复

修复vector<pair<int,int>> push_back时的"expected expression"错误

这个编译错误的核心原因是编译器未启用C++11或更高版本的标准。C11才引入了列表初始化({})语法,允许直接用{a,b}这种形式构造pair并传递给push_back;如果编译器默认使用C03标准,就无法识别这种语法,从而抛出"expected expression"错误。

以下是两种可行的修复方案:

方案1:启用C++11及以上编译标准

在VSCode中,修改编译任务的配置文件(.vscode/tasks.json),在编译参数里添加-std=c++11或更高版本(如-std=c++17)。示例配置片段:

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe build active file",
            "command": "g++.exe",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-std=c++17", // 添加该行启用C++17标准
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            // 其余配置内容保持不变
        }
    ]
}

启用标准后,原代码中的edge.push_back({i, stoi(num)});就能正常编译运行。

方案2:显式构造pair对象(兼容旧标准)

如果不想修改编译标准,可以改用显式构造pair的方式,两种写法任选其一:

  • 使用make_pair函数:
    edge.push_back(make_pair(i, stoi(num)));
    
  • 直接用你定义的ii别名构造:
    edge.push_back(ii(i, stoi(num))); // 因#define ii pair<int,int>,可直接用ii替代
    

修改后的完整代码示例(基于make_pair):

#include <iostream>
#include <sstream>
#include <vector>
#define ii pair<int, int>
using namespace std;

// DSK -> DSC
int n;
vector <ii> edge;
string s, num;

int main()
{
    cin >> n;
    cin.ignore();
    for(int i = 1; i <= n; i++)
    {
        getline(cin, s);
        stringstream ss(s);
        while(ss >> num)
            if(i < stoi(num))
                edge.push_back(make_pair(i, stoi(num)));
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者Mini Cake

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 12:53:17