b****g 发帖数: 192 | 1 题目很简单,没什么说的,但是我卡在C++语法上了。
需要自己写个模板,模板里有个iterator,于是我就不知道该怎么写了。
template
class Wrapper
{
iterator it;
};
给class T做个模板,T可以是vector、list等等。我要写的模板就是把T的iterator赋
给it,这样我在it里面找next就相当于在T的iterator里面找。 |
d**********x 发帖数: 4083 | 2 typename T::iterator it = xxx.begin();
之类的?
【在 b****g 的大作中提到】 : 题目很简单,没什么说的,但是我卡在C++语法上了。 : 需要自己写个模板,模板里有个iterator,于是我就不知道该怎么写了。 : template : class Wrapper : { : iterator it; : }; : 给class T做个模板,T可以是vector、list等等。我要写的模板就是把T的iterator赋 : 给it,这样我在it里面找next就相当于在T的iterator里面找。
|
r*******e 发帖数: 7583 | 3 template
class IteratorWrapper {
public:
IteratorWrapper(T& container)
: d_container(container), d_iter(container.begin()) {
}
bool hasNext() {
return d_iter != d_container.end();
}
typename T::reference next() {
typename T::reference v = *d_iter;
++d_iter;
return v;
}
private:
T& d_container;
typename T::iterator d_iter;
};
iterator赋
【在 d**********x 的大作中提到】 : typename T::iterator it = xxx.begin(); : 之类的?
|
d**********x 发帖数: 4083 | 4 你居然看懂了那个题的要求。。。
【在 r*******e 的大作中提到】 : template : class IteratorWrapper { : public: : IteratorWrapper(T& container) : : d_container(container), d_iter(container.begin()) { : } : bool hasNext() { : return d_iter != d_container.end(); : } : typename T::reference next() {
|
c*****u 发帖数: 867 | 5 谢谢!我问的就是这个typename的语法!
【在 d**********x 的大作中提到】 : typename T::iterator it = xxx.begin(); : 之类的?
|
b****g 发帖数: 192 | 6 请教一下
我按照你的方法写,发现 d_iter != d_container.end(); 这里永远是不相等。
于是我单步调试发现end()的返回值为负数。而d_iter是从0开始逐步加1。于是上
面的不等式永远成立。
请问这是怎么回事?
【在 r*******e 的大作中提到】 : template : class IteratorWrapper { : public: : IteratorWrapper(T& container) : : d_container(container), d_iter(container.begin()) { : } : bool hasNext() { : return d_iter != d_container.end(); : } : typename T::reference next() {
|
b****g 发帖数: 192 | 7 up
【在 b****g 的大作中提到】 : 请教一下 : 我按照你的方法写,发现 d_iter != d_container.end(); 这里永远是不相等。 : 于是我单步调试发现end()的返回值为负数。而d_iter是从0开始逐步加1。于是上 : 面的不等式永远成立。 : 请问这是怎么回事?
|
r*********n 发帖数: 4553 | 8 我觉得不要存vector的iterator,因为很多操作都会invalidate vector iterator,所
以你在wrapper里面存一个reference就好了,至于为什么是负数,我也没看出来(你忘
记delete了).... |