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 没有构造函数
您的 begin
和 end
函数需要像这样:
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>::iterator
是 type
,而不是 variable
。
我想使用 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 没有构造函数
您的 begin
和 end
函数需要像这样:
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>::iterator
是 type
,而不是 variable
。