返回c++中的unique()函数
Returning unique() function in C++
我遇到了下面的函数,它对main()传递的数组进行排序,删除重复项,并返回唯一元素的个数。这是我脑子里最后一个难以理解的部分。
int reduce(long ar[], int n) {
sort(ar, ar + n);
return unique(ar, ar + n) - ar; // ???
}
据我所知,unique()返回一个指针,指向存储数组中唯一值的段的末尾。但是我不明白为什么从迭代器中减去数组名称会得到一个等于唯一元素数量的int,或者为什么不能将unique(ar, ar+n)
类型转换为int来获得相同的结果。
为什么unique(ar, ar+n)不能被类型转换为int来获得相同的结果
因为,正如你所说,unique
返回一个指针。指针是一个内存地址,而不是索引。因此,将指针强制转换为int类型是没有意义的。
* 将两个指针(放入同一个数组中)相减,计算出它们之间的元素个数。为什么从迭代器中减去数组名会得到一个int型,该int型等于唯一元素的个数
*正如@Nawaz在下面的评论中指出的,这个结果是签名的。所以
(p1 - p2) == -(p2 - p1)
假设你有一个这样的数组:
{1, 2, 2, 3, 4, 4, 5}
调用std::unique
之后,您可能会以这样结束(谢谢您,Nawaz),经过新端后的元素保留为调用前的状态:
{1, 2, 3, 4, 5, 4, 5}
^
std::unique
返回一个迭代器到数组的新末端,也就是箭头所在的位置。从逻辑上讲,减去数组的开头将返回唯一元素的个数。如果您想更明确一点,可以使用return std::distance(ar, std::unique(ar, ar + n));
,它在迭代器不支持减法时也可以工作。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- C++14 unique_ptr并使用已删除的函数'std::unique-ptr' unique_ptr错误
- 返回c++中的unique()函数