Maison  >  Questions et réponses  >  le corps du texte

Afficher les éléments en vecteur à l'aide de la fonction de modèle et de l'itérateur

#include <iostream>
#include <vector>
#include <iterator>

using namespace std;

template<typename T>
void factorial(vector<T> ivec, vector<T>::iterator iter) {
    while (iter != ivec.end()) {
        cout << *iter << endl;
        ++iter;
    }
}

int main() {

    vector<int> ivec = { 1,2,3,4,5,6,7 };
    factorial(ivec, ivec.begin());

    return 0;
}

Son message d'erreur dans VS 2017 est le suivant :

警告    C4346    “std::vector<T,std::allocator<_Ty>>::iterator”: 依赖名称不是类型    practice_needForCpp11    d:\practice_needforcpp11\practice_needforcpp11\源.cpp    8    
错误    C2061    语法错误: 标识符“iterator”    practice_needForCpp11    d:\practice_needforcpp11\practice_needforcpp11\源.cpp    8    
错误    C2672    “factorial”: 未找到匹配的重载函数    practice_needForCpp11    d:\practice_needforcpp11\practice_needforcpp11\源.cpp    18    
错误    C2780    “void factorial(std::vector<T,std::allocator<_Ty>>)”: 应输入 1 个参数,却提供了 2 个    practice_needForCpp11    d:\practice_needforcpp11\practice_needforcpp11\源.cpp    18    

S'il vous plaît, dites-moi ce qui ne va pas ici~Merci~~

女神的闺蜜爱上我女神的闺蜜爱上我2646 Il y a quelques jours1004

répondre à tous(2)je répondrai

  • 巴扎黑

    巴扎黑2017-06-23 09:16:59

    Changez deux positions,

    Avant le changement : void factorial(vector<T> ivec, vector<T>::iterator iter)
    Après le changement : void factorial(vector<T> & ivec, typename vector<T>::iterator iter)

    Parlons d'abord du deuxième changement de position. À quoi sert le nom de type ? Référence http://blog.csdn.net/laojiu_/...

    Je ne peux pas expliquer l'emplacement du premier changement s'il n'est pas cité, VS signalera une incompatibilité de type lors de la comparaison avec end(). . .

    répondre
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-06-23 09:16:59

    Lors de l'exécution sur Vs2008, une erreur sera signalée.
    Les raisons de l'erreur sont :
    (1) vector<int> ivec = {1,2,3,4,5,6,7} ; le vecteur ne peut pas être initialisé et affecté directement comme ceci. Vous pouvez le remplacer par ceci

    vector<int> ivec;
        for(int i=1;i<8;i++){
            ivec.push_back(i);
        }

    (2) La fonction n'est pas bien écrite. Écrivez-la simplement comme ceci. Il n'est pas nécessaire de passer ivec.begin() à la fonction. Étant donné que vous avez déjà transmis ivec à la fonction, la fonction obtiendra toutes les informations d'ivec sans ajouter d'informations superflues.

    #include "iostream"
    #include <vector>
    using namespace std;
    void factorial(vector<int> ivec) {
        vector<int>::iterator it;
        for(it=ivec.begin();it!=ivec.end();it++)
        cout<<*it<<endl;
    }
    
    int main()
    {
        vector<int> ivec;
        for(int i=1;i<8;i++){
            ivec.push_back(i);
        }
        factorial(ivec);
    
        return 0;
    }

    répondre
    0
  • Annulerrépondre