c++ - 数组的 unique() 函数如何工作
问题描述
int a[4] = {3,1,2,3};
sort(a,a+n);
int j = unique(a,a+n) - a; // j=3
在此代码中,变量j
返回数组中唯一元素的总数a
。但我无法理解这段代码是如何工作的。
我知道在列表中,
list::unique() 是 C++ STL 中的一个内置函数,它从列表中删除所有重复的连续元素。它仅适用于排序列表。
解决方案
std::unique()
将移动范围内的重复项[a+0, a+n)
,并返回该范围内的新迭代器,该迭代器将标记数组的新“结束”,即第一个非唯一项现在移动到数组中的位置。
如果然后从该迭代器中减去开始迭代器,unique(a,a+n) - a;
您将获得在数组的开始和新的“结束”之间的元素数。这就是您能够获得独特元素数量的方式。
需要注意的是,我在这里使用“end”,因为数组的大小是固定的。你实际上并没有改变数组的大小,你只是将重复的元素移动到数组的后面,并将唯一的元素保留在前面。
还应该注意的是,发生这种情况后,返回的迭代器处和之后的所有内容都unique()
将具有未指定的值。为它们设置新值是合法的,但使用未指定的值会导致未定义的行为。
推荐阅读
- javascript - 尝试从 NextJS 中的 req 对象读取时,未定义获取 req.headers
- ethereum - 在图节点中部署平衡器子图时如何解决trace_filter不存在?
- azure - 从 ARM 模板创建资源组时的 FunctionInvokeUrlNotFound
- r - 将矩阵或数据框扩展为具有相同行名和列名的二次方
- json - Python json:解析和更新文件 json 不起作用
- python - Matplotlib - 使用 semilogy 或 semilogx 时将纵横比设置为相等
- python - 在另一列 Python 中使用随机绘制的指标创建抽样分布
- algorithm - 计算连接的连续段
- azure - n Azure Devops 拉取请求。合并后完成关联的工作项禁用
- python - 如何在 Python 类中获取类函数对象?