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

C++ LeetCode两数之和代码调用vector.push_back无匹配函数报错求解

问题解答

报错的直接原因

  • 首先明确各变量的类型属性:
    • num是vector<int>类型,调用num.data()返回的是指向vector首个存储元素的int类型指针(int*)
    • 用auto推导的循环变量i、以及find返回的vec2都是int*类型,本质是存储int元素的内存地址
    • 存储返回值的result是vector<int>类型,它的push_back方法仅接收int类型的入参,不支持直接传入指针类型
  • 你修改代码后直接把指针i、vec2传入push_back,参数类型和函数要求的入参类型完全不匹配,编译器找不到对应的重载函数,因此抛出类型不匹配的报错。

两种写法的本质区别

  • 原写法i - num.data():两个同类型的指针做减法运算,得到的是两个指针之间的元素偏移量,属于整数类型(ptrdiff_t,可隐式转换为int),这个偏移量恰好等于当前指针指向的元素在vector中的下标,既符合LeetCode题目要求返回下标整数的规则,也和vector<int>的元素类型匹配,因此可以正常运行。
  • 修改后的写法直接传入i:你传入的是元素的内存地址本身,属于指针类型,既不符合题目要返回下标的业务要求,也和vector<int>的元素类型冲突,因此会触发编译报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 02:36:04