首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

size of list?该怎么解决

2012-03-16 
size of list?请看如下代码,list intv(6)list int ::iteratoritv.begin()for(inti0i 6i++){v.i

size of list?
请看如下代码,

  list <int>   v(6);
  list <int> ::iterator   it=v.begin();
  for   (int   i=0;   i <6;   i++){
  v.insert(it,i);
  std::cout < <   *it   < <   "   ";           //   0   0   0   0   0   0   ?
  }
  std::cout < <std::endl;
  list <int> ::iterator   iter=v.begin();
                    std::cout < <std::endl;
  for   (;   iter!=v.end();   ++iter){
  std::cout < <   *iter   < <   "   ";   //   0   1   2   3   4   5   0   0   0   0   0   0   ?
  }
疑问:
1.
既然   it一直是v.begin();  
v.insert(it,i);   是怎么插入成功的//   0   1   2   3   4   5  

2.
v的size()怎么变成两倍?
std::cout < <   v.size();   //   12   ?

3.
如果事先不指定v的大小,则一切正常。

[解决办法]
1:list有个head节点吧
2:大小变成两倍,可能是优化的结果,比如大小为6时,再加一个,可能就会分配到12给你
3,不指定时不变大,是因为编译器第一分配时,值就大于6了

4:看一下STL标准库就知道了
[解决办法]
再k下英语吧,insert是什么意思?
list <int> v(6);
v本来有6个,你再insert了6个就是12了。

insert != assign ;
[解决办法]
楼主没有弄清楚list的用法,使用Insert的时候,list就像链表的插入一样,会自动分配内存插入,从而使v的的大小增加,这也不难明白为什么“it一直是v.begin();
v.insert(it,i); 是怎么插入成功的”,插入是分配新空间然后插入,不是简单的替换。如果不指定大小,默认为0,所以这时候插入,也就是v的大小就是插入多少了,这个很容易理解.
[解决办法]
list本来就是链表啊!
insert是插入操作,不是赋值操作。

热点排行