【发布时间】:2017-06-22 11:28:26
【问题描述】:
我一直在四处寻找,并为 std::algorithm 编写一些基本示例,出于某种原因,我从来没有觉得它们像这样工作很奇怪:
#include <vector>
#include <algorithm>
int main(){
std::vector<int> vec;
vec.resize( 100 );
std::generate( std::begin( vec ), std::end( vec ), std::rand );
auto element = std::max_element( std::begin( vec ), std::end( vec ) );
}
为什么不需要这样的模板参数:
std::generate<std::vector<int>::iterator>( ...
std::max_element<std::vector<int>::iterator>( ...
【问题讨论】:
-
你的标题已经有了答案...
std::being(vec)是std::vector<int>::iterator,所以不需要再告诉编译器 -
我不确定你在问什么。您是在问为什么不需要为 generate() 和 max_element 显式定义迭代器? std::begin 和 std::end 返回迭代器,向量的类型包含在 vec 中。