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是插入操作,不是赋值操作。