簡體   English   中英

STL向量:迭代元素

[英]STL vector:Iterate elements

我想使用c ++ 11“for loop”來迭代向量的元素但我收到一些錯誤(begin()和end()函數我認為是一個問題)。謝謝!

#include <iostream>
#include <vector>
#include<iterator>
using namespace std;
template<typename TElement>
class MyClass {
private:
     vector<TElement> vec;
public:

MyClass& operator+(TElement n) {
     vec.push_back(n);
     return *this;
}
int getS() {
     return vec.size();
}
iterator begin() {//here is some problems
     return vec.begin();
}
iterator end() {
     return vec.end();
}
};

int main() {
    MyClass<int> mm;
    mm = mm + 10; 
    mm = mm + 9;
    double avg = 0.0;
    for (auto g : mm) { //begin() and end() functions error
       avg += mm;
    }
    cout<< avg / mm.getS();
    return 0;
}

錯誤:

C2675一元'++':'std :: iterator'沒有定義此運算符或轉換為預定義運算符可接受的類型,

非法間接,

C2678二進制'!=':找不到哪個運算符采用'std :: iterator'類型的左操作數,

C2955'std :: iterator':使用類模板需要模板參數列表,

C2514'std :: iterator':類沒有構造函數

您的beginend功能必須如下所示:

typename vector<TElement>::iterator begin() {
  return vec.begin();
}

typename vector<TElement>::iterator end() {
  return vec.end();
}

這是向量返回的實際迭代器類型。 相比之下, std::iterator是一個完全不同且不相關的類型。

    typedef typename vector<TElement>::iterator Iterator;

    Iterator begin() {//here is some problems
        return vec.begin();
    }

    Iterator end() {
        return vec.end();
    }

這會更好。

假定模板聲明或定義中使用的名稱以及依賴於模板參數的名稱不會命名類型,除非適用的名稱查找找到類型名稱或名稱由關鍵字typename限定。

我們需要確保vector<TElement>::iterator是一個type ,而不是一個variable

暫無
暫無

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

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