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

std::vector调用sort函数时operator+匹配失败及size()函数应用问题求助

问题分析与解决方案

哈哈,这个问题我之前刚帮朋友排查过,其实就是把std::vector和C风格数组的用法搞混啦!咱们一步步来拆解解决:

首先看你遇到的第一个核心报错:

main.cpp:13:23: error: no match for ‘operator+’ (operand types are ‘std::vector’ and ‘std::vector::size_type {aka long unsigned int}’)
sort(arr, arr + arr.size());

这个错误的本质是:你把std::vector<int>对象当成了C风格数组指针来用。arr是一个vector实例,不是指向数组首元素的指针,所以没法用+运算符和size_type数值相加。而标准库的std::sort函数需要的是迭代器,vector刚好自带了获取迭代器的方法。


第一步:修正sort的调用方式

把出错的那行代码:

sort(arr, arr + arr.size());

直接改成:

sort(arr.begin(), arr.end());

arr.begin()会返回指向vector首元素的迭代器,arr.end()返回指向尾元素下一个位置的迭代器,完美匹配std::sort的参数要求。


第二步:为什么你的sizeof尝试会失败?

你试过用vector<int> n = sizeof(arr) / sizeof(arr[0]);这种写法,这是典型的C风格数组长度计算方式,但完全不适用于std::vector:

  • sizeof(arr)得到的是vector类对象自身的内存占用(比如包含指针、容量、大小这些成员的字节数),不是它存储的所有元素的总字节数
  • 用这个值除以sizeof(arr[0])得到的结果毫无意义,再赋值给vector<int>类型的变量,类型不匹配自然会报错。

如果真的需要把vector的大小存成变量,直接写:

size_t n = arr.size();

不过在你的代码里其实完全不需要这个变量,直接用begin()和end()就足够了。


修正后的完整代码

vector<int> removeDuplicates2(vector<int> arr) {
    if(arr.size() == 0) {
        return {};
    } else {
        sort(arr.begin(), arr.end()); // 核心修正处
    }
    vector<int> noDuplicatesArr;
    noDuplicatesArr.push_back(arr[0]);
    for(int i = 1; i < arr.size(); i++) {
        if(arr[i] != arr[i-1])
            noDuplicatesArr.push_back(arr[i]);
    }
    return noDuplicatesArr;
}

额外小优化(可选)

如果想提升性能,可以把函数参数改成const vector<int>& arr(引用传递),避免拷贝整个vector,不过这和当前报错无关,属于进阶优化~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 21:32:50