定义如下的类
class CA
{
public:
void fun1()
{
for(vector<int>::iterator iter = m_v1.begin(); iter != m_v1.end(); iter++)
{
if(*iter == 7)
{
fun2();
}
}
}
void fun2()
{
m_v1.push_back(999);
}
protected:
vector<int> m_v1;
vector<int>::iterator m_iter;
private:};
在你使用fun1()的时候,在循环中push,iter就会有问题, 如何解决这个问题呢.
程序有可能嵌套很多,就是你不能保证循环中不push, 这个问题比较麻烦.
class CA
{
public:
void fun1()
{
for(vector<int>::iterator iter = m_v1.begin(); iter != m_v1.end(); iter++)
{
if(*iter == 7)
{
fun2();
}
}
}
void fun2()
{
m_v1.push_back(999);
}
protected:
vector<int> m_v1;
vector<int>::iterator m_iter;
private:};
在你使用fun1()的时候,在循环中push,iter就会有问题, 如何解决这个问题呢.
程序有可能嵌套很多,就是你不能保证循环中不push, 这个问题比较麻烦.
{
public:
void fun1()
{
for(int i = 0; i < m_v1.size(); i++)
{
if(m_v1[i] == 7)
{
fun2();
}
}
}
void fun2()
{
m_v1.push_back(999);
}
protected:
vector<int> m_v1;
vector<int>::iterator m_iter;
private:};
最好把 for(int i = 0; i < m_v1.size(); i++)
改成:
int nSize = m_v1.size();
for(int i = 0; i < nSize ;i++)
减少不必要的循环和提高访问效率因为每次都要去访问m_v1.size(); 而且还会变。
list, map 等不存在这个问题