c++ - 为什么 std::sort 不要求用户指定模板类型?

标签 c++ templates std c++-standard-library

如果我没理解错的话,在标准库中,有这个std::sort()的定义:

template< class RandomIt > 
constexpr void sort( RandomIt first, RandomIt last );

假设我有一个想要排序的 vector :

std::vector<int> data {9, 7, 5, 3, 1};

如果是这样,那我为什么只能写:

std::sort(data.begin(), data.end());

相对于要求:

std::sort<std::vector<int>::iterator>(data.begin(), data.end());

如果可能,有人可以提供一个通用的解释吗?我想我肯定见过不止一个这样的例子,其中模板类型几乎似乎是自动推导出来的……或者它是自动推导出来的……?

最佳答案

or is it being automatically deduced...?

是的。

当模板参数用于函数参数时,模板参数可以从传递给函数的参数推导出来。因此,在这种情况下,RandomIt 是从参数 data.begin()data.end() 推导出来的。

关于c++ - 为什么 std::sort 不要求用户指定模板类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71257551/

相关文章:

.net - 在 native c++ 中使用 .net 编译的 dll

python.clang AST解析: getting c++ template argument of field declaration

c++ - reinterpret_cast 会导致未定义的行为吗?

c++ - <filesystem> 在 VS2013 与 VS2012 中的不同行为

c++ - 有限大小的队列

c++ - 如何使用 C++ 在 %APPDATA% 中创建一个新文件夹?

C++ 在结构 vector 上使用 std::transform

c++ - 此模板代码中的错误 "Expected Expression"

c++ - 如何在 C++ 中一次性生成不同的随机数?

c++ - 即使使用 strand,async_writes 的顺序也不正确