Paparkan elemen dalam vektor menggunakan fungsi templat dan iterator
女神的闺蜜爱上我
女神的闺蜜爱上我 2017-06-23 09:14:59
0
2
1074
#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;
}

Mesej ralatnya dalam VS 2017 adalah seperti berikut:

警告    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    

Sila beritahu saya apa yang salah di sini~Terima kasih~~

女神的闺蜜爱上我
女神的闺蜜爱上我

membalas semua(2)
巴扎黑

Tukar dua kedudukan,

Sebelum perubahan: void factorial(vector<T> ivec, vector<T>::iterator iter)
Selepas perubahan: void factorial(vector<T> & ivec, typename vector<T>::iterator iter)

Mari kita bincangkan tentang kedudukan perubahan kedua terlebih dahulu. Rujukan http://blog.csdn.net/laojiu_/...

Saya tidak dapat menerangkan lokasi perubahan pertama Jika ia tidak dipetik, VS akan melaporkan ketidakpadanan jenis apabila membandingkan dengan end() saya juga tidak faham. . .

曾经蜡笔没有小新

Apabila berjalan pada Vs2008, ralat akan dilaporkan.
Sebab ralat adalah:
(1) vector<int> ivec = {1,2,3,4,5,6,7}; Anda boleh menggantikannya dengan ini

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

(2) Fungsi ini tidak ditulis dengan baik. Tulis sahaja seperti ini. Tidak perlu menghantar ivec.begin() ke fungsi tersebut. Oleh kerana anda telah menghantar ivec kepada fungsi tersebut, fungsi tersebut akan mendapat semua maklumat ivec tanpa menambah sebarang maklumat tambahan.

#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;
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan