簡體   English   中英

用迭代器循環迭代器向量

[英]looping through a vector of iterators with an iterator

我在最后的 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_iteratorint vector的迭代器。 迭代器向量的迭代器是vector<vector<int>::iterator>::const_iterator

為避免輸入此類怪物類型,請使用auto

for(auto t=ind.begin(); t != ind.end(); ++t){
    cout<<*t;
}

或者當您從開始到結束迭代時,基於范圍的循環:

for(auto t : ind){
    cout<<t;
}

由於您沒有包含錯誤(在撰寫本文時),我只修復了明顯的錯誤。 我想您需要取消引用迭代器以打印實際元素(即在上面的兩個示例中添加* )。

向量indstd::vector<int>::iterator類型元素的std::vector<int>::iterator

所以在 for 循環中你必須至少寫

vector<vector<int>::iterator>::const_iterator t=ind.begin();

它似乎在你的意思的循環中

 cout<<**t;

代替

cout<<*t;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM