因为 list 比 forward_list 多了一个指针(前一个指针),所以如果它们都持有相同数量的元素,即 1<<30,list 将使用几乎 1/3 的内存。对?
然后,如果我重复调用 resize 越来越大,forward_list 必须能够调整大小比 list 大得多。
测试代码:
#include<forward_list>
#include<list>
#include<iostream>
int main(){
using namespace std;
typedef list<char> list_t;
//typedef forward_list<char> list_t;
list_t l;
list_t::size_type i = 0;
try{
while(1){
l.resize(i += (1<<20));
cerr<<i<<" ";
}
}
catch(...){
cerr<<endl;
}
return 0;
}
令我惊讶的是,当进程被终止时,它们的大小几乎相同......任何人都可以解释它吗?