错误:为vector声明迭代器时模板实参1无效

error: template argument 1 is invalid while declaring an iterator for vector

本文关键字:实参 无效 迭代器 vector 声明 错误      更新时间:2023-10-16

以下代码

ifstream read("input-1.txt");
int n,u;read >> n;
vector<list<int>> adj_list (n+1);
string delimiter = "->",vertex,list;
size_t pos = 0;int count;
string::size_type sz;
for (int i=0;i<n;i++){
    read >> list;
    count = 0;
    while((pos = list.find(delimiter))!= string::npos){
        vertex = list.substr(0,pos);
        if (count!=0){
            adj_list[i].push_back(stoi (vertex.substr(1,vertex.length()),&sz));
        }
        list.erase(0,pos+delimiter.length());
        count++;
    }
}
read >> vertex;
u = stoi (vertex.substr(1,vertex.length()),&sz);

vector<list<int>>::iterator it1 = adj_list.begin();
while(it1!=adj_list.end()){
    list<int> new_list = *it1;
    list<int>::iterator it2 = new_list.begin();
    while(it2!=new_list.end()){
        cout << *it2 <<" ";
        it2++;
    }
    cout << endl;
    it1++;
}
cout << u << n << "u" << "n";

给出以下错误

even.cpp:37:26: error: template argument 1 is invalid
  vector<typename list<int>>::iterator it1 = adj_list.begin();
                          ^
even.cpp:37:26: error: template argument 2 is invalid
even.cpp:37:39: error: qualified-id in declaration before ‘it1’
  vector<typename list<int>>::iterator it1 = adj_list.begin();
                                       ^
even.cpp:38:8: error: ‘it1’ was not declared in this scope
  while(it1!=adj_list.end()){
        ^
even.cpp:39:8: error: expected primary-expression before ‘int’
   list<int> new_list = *it1;
        ^
even.cpp:40:8: error: expected primary-expression before ‘int’
   list<int>::iterator it2 = new_list.begin();
        ^
even.cpp:41:9: error: ‘it2’ was not declared in this scope
   while(it2!=new_list.end()){
         ^
even.cpp:41:14: error: ‘new_list’ was not declared in this scope
   while(it2!=new_list.end()){

vector被正确地声明为int型的列表。但是当它的迭代器被声明时,它给出了关于模板参数的错误。我只是使用int而不是任何用户定义的类,然后也有我无法理解的错误。有人能解决这个问题吗?

声明的变量list
string delimiter = "->",vertex,list;

正在遮蔽您想要使用的std::list