STL vector:Iterate 个元素

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': class 模板的使用需要模板参数列表,

C2514 'std::iterator': class 没有构造函数

您的 beginend 函数需要像这样:

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

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

这是向量 returns 的实际迭代器类型。相比之下,std::iterator 是完全不同且无关的类型。

    typedef typename vector<TElement>::iterator Iterator;

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

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

这样会更好

A name used in a template declaration or definition and that is dependent on a template-parameter is assumed not to name a type unless the applicable name lookup finds a type name or the name is qualified by the keyword typename.

我们需要确保 vector<TElement>::iteratortype,而不是 variable