shared_ptr中的unique()
时间: 2023-07-18 18:25:47 浏览: 120
C++ unique_ptr weak_ptr shared_ptr auto_ptr智能指针.doc
5星 · 资源好评率100%
`std::shared_ptr`没有提供`unique()`函数,但是`std::unique_ptr`提供了`unique()`函数,用于在容器中去除重复元素,保留唯一元素。使用方式和`std::unique()`类似,只是需要使用`std::unique_ptr`代替普通指针,示例代码如下:
```c++
#include <iostream>
#include <algorithm>
#include <vector>
#include <memory>
int main()
{
std::vector<std::unique_ptr<int>> vec;
vec.push_back(std::make_unique<int>(1));
vec.push_back(std::make_unique<int>(2));
vec.push_back(std::make_unique<int>(2));
vec.push_back(std::make_unique<int>(3));
vec.push_back(std::make_unique<int>(4));
vec.push_back(std::make_unique<int>(4));
vec.push_back(std::make_unique<int>(5));
auto last = std::unique(vec.begin(), vec.end(), [](const auto& a, const auto& b) { return *a == *b; });
for (auto it = vec.begin(); it != last; ++it)
{
std::cout << **it << " ";
}
std::cout << std::endl;
return 0;
}
```
输出结果为:
```
1 2 3 4 5
```
在这个例子中,我们使用了`std::unique_ptr<int>`代替了普通的`int*`,并且在调用`std::unique()`时指定了一个比较函数,用于判断两个指针所指向的对象是否相等。注意,我们需要使用`**it`来获取`std::unique_ptr`所指向的实际对象。
阅读全文