迭代器 C++ 的类型

type of iterator c++

本文关键字:类型 C++ 迭代器      更新时间:2023-10-16

我正在尝试编写自己的排序函数,可以对向量容器进行排序。

我希望以以下方式调用它:

this:sort(arr.begin(( , arr.end(( - 1(

arr.end(( - 1 - 因为 arr.end(( 返回下一个元素,实际上不是元素,返回迭代器到 end

所以我想在任何类型上使用迭代器调用我的函数。我尝试运行此代码:

#include<iostream>
#include<vector> 
using namespace std;
template<typename T1> 
void func(vector<T1>::iterator it) {
    cout << "n" << *it; 
}
int main() {
    vector<int> arr(10);
    for(int i = 0;i < 10;++i)
        arr[i] = i+1;
    func<int>(arr.begin()); 
}

但是编译器说:

main.cpp:10:23: error: variable or field ‘func’ declared void  void func(vector<T1>::iterator it)
                              main.cpp:10:32: error: expected ‘)’ before ‘it’  void func(vector<T1>::iterator it)
                                 main.cpp: In function ‘int main()’: main.cpp:26:5: error: ‘func’ was not declared in this scope
     func<int>(arr.begin());
     func main.cpp:26:10: error: expected primary-expression before ‘int’
     func<int>(arr.begin());

请解释我的错误。谢谢

编译器

不知道迭代器是内部的一种类型vector<T1>

template<typename T1> void func(typename vector<T1>::iterator it) {
    cout << "n" << *it; }

在模板内部,某些构造具有可能不同的语义 从一个实例化到另一个实例化。这样的构造取决于 模板参数。

您应该为此类依赖类型编写typename