我在最终的for循环中收到错误:
error: conversion from '__normal_iterator<__gnu_cxx::__normal_iterator<int*, std::vector<int> >*,vector<__gnu_cxx::__normal_iterator<int*, std::vector<int> >>>' to non-scalar type '__normal_iterator<const int*,vector<int>>' requested
20 | for(vector<int>::const_iterator t=ind.begin(); t != ind.end(); ++t){
| ~~~~~~~~~^~
我一直在寻找解决类似问题的方法,但仍然没有发现我做错了。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m,a;
vector<int>::iterator b;
cin>>n>>m;
vector<int> seq(n);
vector<vector<int>::iterator> ind;
for(int i=0;i<n;i++){
cin>>seq[i];
}
for(int i=0;i<m;i++){
cin>>a;
b=find(seq.begin(),seq.end(),a);
if(b!=seq.end()){
ind.push_back(b);
}
}
sort(ind.begin(),ind.end());
for(vector<int>::const_iterator t=ind.begin(); t != ind.end(); ++t){
cout<<*t;
}
return 0;
}
vector<int>::const_iterator
是vector
的int
的迭代器。向量的迭代器是vector<vector<int>::iterator>::const_iterator
。
为了避免键入此类怪物类型,请使用auto
:
for(auto t=ind.begin(); t != ind.end(); ++t){
cout<<*t;
}
或当您从头到尾进行迭代时,将执行基于范围的循环:
for(auto t : ind){
cout<<t;
}
由于您没有包括错误(在撰写本文时),我只修复了明显的错误。我想您需要取消引用迭代器以打印实际元素(即,在以上两个示例中都添加一个*
)。
向量ind
是类型为std::vector<int>::iterator
的元素的向量。
因此,在for循环中,您至少必须像这样写
vector<vector<int>::iterator>::const_iterator t=ind.begin();
似乎在循环中,这意味着
cout<<**t;
代替
cout<<*t;