w****x 发帖数: 2483 | 1 怎么写vector>的iterator?
只能用stl的iterator不能用下标, 考虑空vector.
很难写啊感觉,哪位能丢个代码看看? 谢谢 |
h********6 发帖数: 285 | |
S**I 发帖数: 15689 | 3 找个STL implementation的源代码看看不就知道了。
【在 w****x 的大作中提到】 : 怎么写vector>的iterator? : 只能用stl的iterator不能用下标, 考虑空vector. : 很难写啊感觉,哪位能丢个代码看看? 谢谢
|
w****x 发帖数: 2483 | 4
是vector不是vector
【在 S**I 的大作中提到】 : 找个STL implementation的源代码看看不就知道了。
|
S**I 发帖数: 15689 | 5 你是说这个iterator要遍历所有的int元素?
【在 w****x 的大作中提到】 : : 是vector不是vector
|
w****x 发帖数: 2483 | 6
恩,要注意empty vector要跳过
【在 S**I 的大作中提到】 : 你是说这个iterator要遍历所有的int元素?
|
h****e 发帖数: 928 | |
d******a 发帖数: 238 | 8 我刚写了个,没怎么检查,欢迎探讨。
class Iterator{
public:
` Iterator(vector> &a) : v(a)
{
m_outer_iter = v.begin();
while (m_outer_iter != v.end())
{
if (m_outer_iter->size() != 0)
break;
else
m_outer_iter++;
}
if (m_outer_iter == v.end())
m_flag = false;
else
{
m_inner_iter = m_outer_iter->begin();
m_next = *m_inner_iter;
m_flag = true;
}
}
bool HasNext()
{
return m_flag;
}
int Next()
{
int result = m_next;
m_inner_iter++;
if (m_inner_iter == m_outer_iter->end())
{
m_outer_iter++;
while (m_outer_iter != v.end())
{
if (m_outer_iter->size() != 0)
{
m_inner_iter = m_outer_iter.begin();
break;
}
else
m_outer_iter++;
}
}
if (m_outer_iter != v.end())
{
m_next = *m_inner_iter;
m_flag = true;
}
else
m_flag = false;
return result;
}
private:
vector> &v;
vector>::iterator m_outer_iter;
vector::iterator m_inner_iter;
int m_next;
bool m_flag;
} |