【问题标题】:How unique() function for array works数组的 unique() 函数如何工作
【发布时间】:2021-10-15 21:36:08
【问题描述】:
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 中的一个内置函数,它从列表中删除所有重复的连续元素。它仅适用于排序列表。

【问题讨论】:

标签: c++ arrays sorting unique


【解决方案1】:

std::unique() 将移动[a+0, a+n) 范围内的重复项,并在该范围内返回一个新迭代器,该迭代器将标记数组的新“结束”,即第一个非唯一项所在的位置现在移到数组中。

如果然后从该迭代器中减去开始迭代器,您使用unique(a,a+n) - a; 执行此操作,您将获得数组开始和新“结束”之间的元素数。这就是您能够获得独特元素数量的方式。

需要注意的是,我在这里使用“end”,因为数组的大小是固定的。您实际上并没有改变数组的大小,您只是将重复的元素移到数组的后面,并将唯一元素保留在前面。

还应该注意的是,在这种情况发生之后,unique() 返回的迭代器及其之后的所有内容都将具有未指定的值。为它们设置新值是合法的,但使用未指定的值会导致未定义的行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-26
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    相关资源
    最近更新 更多