如何将 std::sort() 与 std::unique_ptr<[]> 一起使用?
Posted
技术标签:
【中文标题】如何将 std::sort() 与 std::unique_ptr<[]> 一起使用?【英文标题】:How can I use std::sort() with std::unique_ptr<[]>? 【发布时间】:2021-03-11 15:59:16 【问题描述】:std::unique_ptr<type[]> D std::make_unique<type[]>(10'000) ;
std::sort(D2[0], D2[10'000], [](auto& a, auto& b)->bool return a < b; ); //error
我使用std::unique_ptr<[]>
来读取二进制文件。
如果我想对这些数据进行排序,我是否必须制作另一个向量或其他东西?
我不知道如何使用sort
func 和unique_ptr<[]>
。你能告诉我路吗?
【问题讨论】:
请原谅我的好奇,但为什么是std::unique_ptr<type[]>
而不是std::vector<type>
或者可能是std::array<type, 10'000>
?
std::sort(&D2[0], &D2[10'000], ...)
@Someprogrammerdude 不是 OP,但 std::vector<type>
可以调整大小,D
不能。它没有相关接口或跟踪大小或容量的负担。 std::array<type,10000>
需要 constexpr
大小,但 D
不需要。
@FrançoisAndrieux 更重要的是,向量可能会被意外复制。
@n.'pronouns'm。 operator[]
在调试模式下的某些实现下触发结束迭代器的断言。对于std::vector
,它肯定在 Visual Studio 中起作用
【参考方案1】:
您可以将指针用作排序例程的迭代器:
std::sort(D.get(), D.get() + 10'000);
【讨论】:
【参考方案2】:您知道吗,在 C++11 及更高版本中,迭代器标头为内置数组类型提供了 begin() 和 end() 函数,这些函数返回指向数组的第一个元素和一个结束元素的指针?
【讨论】:
以上是关于如何将 std::sort() 与 std::unique_ptr<[]> 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章
混淆使用 std::less 和 std::greater 与 std::sort
如何使用单独类的属性对向量进行 std::sort [关闭]