hello~ 很高兴见到大家! 这次带来的是C++中关于list容器这部分的一些知识点,如果对你有所帮助的话,可否留下你的三连呢? 个 人 主 页: 默|笙

关于list:

接下来,我会讲解除了move构造之外的构造的一些小知识点。
//一般都会有这样几个构造
list<int> lt1;//默认构造=default
list<int> lt2(10, 1);//n个val填充构造-till
vector<int> v1 = { 1,2,3,4,5 };
list<int> lt3(v1.begin(), v1.end());//迭代器区间构造-range,可以传递vector类型指针
list<int> lt4 = { 1, 2, 3, 4, 5 };//初始化列表构造-initializer
list<int> lt5 = lt4;//拷贝构造-copy
//迭代器区间构造可以传数组的指针
int a[] = { 1, 2, 11, 3, 4, 5, 40};
list<int> lt6(a, a + 4);//注意格式
我们能够通过函数原型观察到,迭代器也是有分类的,那么它有哪些类型呢?





由于算法库里的sort要求Random迭代器,list 和 vector类型都无法使用,所以list和 vector 里有专门实现的它的sort函数。


srand(time(0));
const int N = 100000;
list<int> lt1;
vector<int> v;
for (int i = 0; i < N; ++i)
{
auto e = rand() + i;//由于函数特性,rand函数只能生成3万多个随机数,而我们需要10万个
lt1.push_back(e);
v.push_back(e);
}
int begin1 = clock();
// 排序
sort(v.begin(), v.end());
int end1 = clock();
int begin2 = clock();
lt1.sort();
int end2 = clock();
printf("vector sort:%d\n", end1 - begin1);
printf("list sort:%d\n", end2 - begin2);
srand(time(0));
const int N = 1000000;
list<int> lt1;
list<int> lt2;
for (int i = 0; i < N; ++i)
{
auto e = rand() + i;
lt1.push_back(e);
lt2.push_back(e);
}
int begin1 = clock();
// 拷贝vector
vector<int> v(lt2.begin(), lt2.end());
// 排序
sort(v.begin(), v.end());
// 拷贝回lt2
lt2.assign(v.begin(), v.end());
int end1 = clock();
int begin2 = clock();
lt1.sort();
int end2 = clock();
printf("list copy vector sort copy list sort:%d\n", end1 - begin1);
printf("list sort:%d\n", end2 - begin2);
1. 数据在不在缓存,在缓存就叫命中,不在就叫不命中. 2. 不在缓存,先加载到缓存,再访问。

今天的分享就到此结束啦,如果对读者朋友们有所帮助的话,可否留下宝贵的三连呢~~ 如果可以, 那就让我们共同努力, 一起走下去!