只是有一个关于类模板的问题:
对于以下代码,该函数运行完全正常,但我很困惑为什么/如何在不提供迭代器的类/类型的情况下运行填充函数(为什么不需要提供迭代器类型):
#include <vector>
#include <iostream>
#include <typeinfo>
template<typename Iter>
void fill(Iter first, Iter limit, int value){
while (first != limit) {
*first = value;
++first;
}
}
int main() {
std::vector<int> vec1 {2, 4, 6, 1, 9};
fill(vec1.begin(), vec1.end(), 7);
}
无论如何,我的实际问题如下:
我只是想做template <typename Iter, typename A>
,所以我可以指定函数中值变量的数据类型(而不是必须在函数模板中显式命名 int)
然而,当我尝试fill<int>(...)
按照这个思路,程序根本无法正确编译:
#include <vector>
#include <iostream>
#include <typeinfo>
template<typename Iter, typename A>
void fill(Iter first, Iter limit, A value){
while (first != limit) {
*first = value;
++first;
}
}
int main() {
std::vector<int> vec1 {2, 4, 6, 1, 9};
fill<int>(vec1.begin(), vec1.end(), 7);
}
基本上我只是好奇如何更改模板以允许单个fill<datatype of value>(arg1,arg2...)
函数仍然正确接受迭代器而无需显式命名它们。
Thanks!
edit: 最终使用::fill
!谢谢大家提供的知识和信息!