gpt4 book ai didi

C++:仅在一个元素上使用 unique_copy

转载 作者:行者123 更新时间:2023-11-30 02:35:39 25 4
gpt4 key购买 nike

这是在 cplusplus.com 上找到的实现

template <class InputIterator, class OutputIterator>
OutputIterator unique_copy (InputIterator first, InputIterator last,
OutputIterator result) {
if (first==last) return result;

*result = *first;
while (++first != last) {
typename iterator_traits<InputIterator>::value_type val = *first;
if (!(*result == val)) // or: if (!pred(*result,val)) for version (2)
*(++result)=val;
}
return ++result;
}

那么当“first”和“last”迭代器指向同一个元素时,我们不返回任何东西?这似乎与 unique_copy 的定义不一致:复制范围 [first,last) 中每个连续等效元素组的第一个元素。是因为“最后)”部分吗?谁能澄清一下?谢谢!

最佳答案

你是对的,[first, last) 是问题所在。

将迭代器分配给容器时,标准的做法是,您可能拥有的最后一个迭代器指向容器中最后一个元素之后的内存位置 1 次迭代。

例如

vector<int> aVec{5,-8,23,200};
vector<int>::iterator currentItr, lastItr;

// iterator to first element, 5
currentItr = aVec.begin();


// iterator to element ***directly after*** last element
lastItr = aVec.end();
// in other words, there is no reason to access the value attached to lastItr

.end() 标准存在的一个原因是很容易判断 currentItr 何时超过容器中的可用值;

例如

while (currentItr != lastItr) // currentItr will not print once it's equal to lastItr
cout << *currentItr++ << endl;

在您的具体示例中,如果容器中有一个元素,则迭代器 [first, last) 不应该相等。“first”是一个迭代器,位于迭代器“last”左侧的一个元素。

如果 first == last,那么可能的迭代器范围是:

[首先,第一个) 或者[最后,最后)

可能的跨度不能同时包含排除任何迭代器。这听起来很疯狂。

祝你好运。

关于C++:仅在一个元素上使用 unique_copy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33401915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com