首页 > 解决方案 > 'operator+' 不匹配(操作数类型为 'std::vector' 和 'std::vector::size_type {aka long unsigned int}')

问题描述

我找不到应用 size() 函数的方法。

我有以下输出:

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());

在以下代码中:

vector<int> removeDuplicates2(vector<int> arr)
{
    if(arr.size() == 0) 
    {
        return {};
    } else 
    {
       sort(arr, arr + arr.size());
    }
    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;
}

所有代码都来自 geeksforgeeks.org 和 edcuba.com 文档,所以我不知道接下来在哪里可以找到解决方案;我试图设置一个新值 n

vector<int> n = sizeof(arr) / sizeof(arr[0]);
OR
<int> n = sizeof(arr) / sizeof(arr[0]); 

我得到

main.cpp:6:33: error: conversion from ‘long unsigned int’ to non-scalar type ‘std::vector’ requested
     vector<int> n = sizeof(arr) / sizeof(arr[0]);
OR
main.cpp:13:23: error: no match for ‘operator+’ (operand types are ‘std::vector’ and ‘int’)
         sort(arr, arr + n);

标签: c++vectorc++17

解决方案


sort将一对迭代器作为其参数。

arr顾名思义,如果是一个 C 风格的数组,那么在数组到指针衰减arr之后arr + N(数组中元素的数量在哪里N)将是指向数组开头和结尾的指针. 指针是一个迭代器,因此这将是一对有效的参数传递给sort.

但是,arr它不是 C 样式的数组,它是一个std::vector<int>. 所以arr不是迭代器,arr + arr.size()而是试图为容器添加大小,这没有任何意义。值得庆幸的是,std::vector它的迭代器确实有成员函数:beginend。所以你可以写

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

推荐阅读