gpt4 book ai didi

c++ - std::unique 是否使 vector 迭代器无效?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:12:39 32 4
gpt4 key购买 nike

对于这段代码:

std::vector<int> v = {...};
std::sort(v.begin(), v.end());

// Does this work?
std::size_t unique_count = std::unique(v.begin(), v.end()) - v.cbegin();

在最后一行中,我认为因为 std::unique 只是在 vector 内部移动东西而不是向其中插入任何东西,所以迭代器不应该无效,所以我的方式计算 unique_count 应该是正确的。但我想确保情况确实如此。是吗?

最佳答案

std::unique 是一种算法。所有 STL 算法都在范围而不是容器上运行。

虽然算法可能会交换元素内容,但这些元素的迭代器保持不变。

这是保证。

如果不是,那么这将无法工作:

#include <algorithm>
#include <vector>
#include <iostream>
#include <array>

int main()
{

auto unique_size = [](auto&& container)
{
std::sort(std::begin(container), std::end(container));
return std::unique(std::begin(container), std::end(container)) - std::cbegin(container);
};

std::cout << unique_size(std::vector<int> {6,5,4,4,3,2,1}) << std::endl;
std::cout << unique_size(std::array<int,7> {6,5,4,4,3,2,1}) << std::endl;
int x[] = {6,5,4,4,3,2,1};
std::cout << unique_size(x) << std::endl;

// Does this work? yes.
}

强制输出:

6
6
6

关于c++ - std::unique 是否使 vector 迭代器无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38263334/

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