【发布时间】:2021-07-09 13:47:13
【问题描述】:
我找不到应用 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);
【问题讨论】:
-
您希望这能做什么?
arr + arr.size() -
您正在尝试将 C 样式的数组约定应用于 C++
std::vector。这是行不通的。我们可以纠正每个错误,但我建议您获取a good C++ book 以学习。 Geeksforgeeks 是出了名的糟糕来源。 -
你的意思很可能是
sort(arr.begin(), arr.end());,下面的代码是std::unique_copy的重新实现 -
@IgorTandetnik 这行得通。我已经知道了。但我正在关注 geeksforgeeks 的一些教程,但我只是卡住了
-
@NathanPierson 它也有助于保持一致。它对容器和 c-arrays 的工作方式相同。如果用作蓝图的代码 OP 使用了
std::begin和std::end,他们可以用摩擦更少的向量替换 c 数组