天天看点

C# list删除 另外list里面的元素_C++ vector和list的区别

C++ vector和list的区别

C# list删除 另外list里面的元素_C++ vector和list的区别
  • list是由双向链表实现的,内存空间是不连续的。由链表的实现原理可知:
    • 优点:插入和删除效率较高。只需要在插入的地方更改指针的指向即可,不用移动数据。
    • 缺点:List查询效率较低,时间复杂度为O(n)
  • vector拥有一段连续的内存空间,并且起始地址不变,与数组类似:
    • 优点:便于随机访问,时间复杂度为O(1),
    • 缺点:因为内存空间是连续的,所以在进入插入和删除操作时,会造成内存块的拷贝,时间复杂度为O(n)。

迭代方法

  • list的iterator不支持

    +、+=、<

    等操作,vector支持;
  • vector<int>::iterator

    list<int>::iterator

    都重载了

    ++

    操作;

list几种迭代方法

迭代器

第1种

list<int> int_l;          //声明一个list
for(int i=0;i<10;i++){
    int_l.push_back(i);
}
list<int>::iterator iter; //声明一个迭代器
for(iter = int_l.begin();iter!=int_l.end();itet++){
    cout <<"打印:"<< *iter <<endl;
}
           

第2种

list<int> int_l;          //声明一个list
for(int i=0;i<10;i++){
    int_l.push_back(i);
}
list<int>::iterator iter; //声明一个迭代器
for(int iter:int_l){
    cout <<"打印:"<< *iter <<endl;
}
           

vector

附录

list常用函数

//1. list中的构造函数:================

list() //声明一个空列表;

list(n) //声明一个有n个元素的列表,每个元素都是由其默认构造函数T()构造出来的

list(n,val) //声明一个由n个元素的列表,每个元素都是由其复制构造函数T(val)得来的

list(n,val) //声明一个和上面一样的列表

list(first,last) //声明一个列表,其元素的初始值来源于由区间所指定的序列中的元素

//1. list中的操作:================
begin()和end();//通过调用list容器的成员函数begin()得到一个指向容器起始位置的iterator,可以调用list容器的 end() 函数来得到list末端下一位置,相当于:int a[n]中的第n+1个位置a[n],实际上是不存在的,不能访问,经常作为循环结束判断结束条件使用。

push_back() 和push_front();//使用list的成员函数push_back和push_front插入一个元素到list中。其中push_back()从list的末端插入,而 push_front()实现的从list的头部插入。

empty();//利用empty() //判断list是否为空。

resize();如果调用resize(n)将list的长度改为只容纳n个元素,超出的元素将被删除,如果需要扩展那么调用默认构造函数T()将元素加到list末端。如果调用resize(n,val),则扩展元素要调用构造函数T(val)函数进行元素构造,其余部分相同。

clear();//清空list中的所有元素。

front()和back(); //通过front()可以获得list容器中的头部元素,通过back()可以获得list容器的最后一个元素。但是有一点要注意,就是list中元素是空的时候,这时候调用front()和back()会发生什么呢?实际上会发生不能正常读取数据的情况,但是这并不报错,那我们编程序时就要注意了,个人觉得在使用之前最好先调用empty()函数判断list是否为空。

pop_back和pop_front()//通过删除最后一个元素,通过pop_front()删除第一个元素;序列必须不为空,如果当list为空的时候调用pop_back()和pop_front()会使程序崩掉。

assign();//具体和vector中的操作类似,也是有两种情况,第一种是:l1.assign(n,val)将 l1中元素变为n个T(val)。第二种情况是:l1.assign(l2.begin(),l2.end())将l2中的从l2.begin()到l2.end()之间的数值赋值给l1。

swap();//交换两个链表(两个重载),一个是l1.swap(l2); 另外一个是swap(l1,l2),都可能完成连个链表的交换。

reverse()//通过reverse()完成list的逆置。

merge();//合并两个链表并使之默认升序(也可改),l1.merge(l2,greater<int>()); 调用结束后l2变为空,l1中元素包含原来l1 和 l2中的元素,并且排好序,升序。其实默认是升序,greater<int>()可以省略,另外greater<int>()是可以变的,也可以不按升序排列。
           
若你对人工智能(CV/NLP)、C++/python编程、互联网就业及发展有兴趣,欢迎点赞关注和收藏。谢谢鼓励!!!

C++相关知识:

Anxjing.AI:C++ this_thread::sleep_for​zhuanlan.zhihu.com

C# list删除 另外list里面的元素_C++ vector和list的区别

Anxjing.AI:C++ Lambda表达式​zhuanlan.zhihu.com

C# list删除 另外list里面的元素_C++ vector和list的区别

Anxjing.AI:C++并发_condition_variable​zhuanlan.zhihu.com

C# list删除 另外list里面的元素_C++ vector和list的区别

Anxjing.AI:生产者-消费者模型​zhuanlan.zhihu.com

C# list删除 另外list里面的元素_C++ vector和list的区别

Anxjing.AI:C++预处理指令​zhuanlan.zhihu.com

C# list删除 另外list里面的元素_C++ vector和list的区别

Anxjing.AI:C++工具:Cmake​zhuanlan.zhihu.com

C# list删除 另外list里面的元素_C++ vector和list的区别

Anxjing.AI:SSH 学习​zhuanlan.zhihu.com

C# list删除 另外list里面的元素_C++ vector和list的区别

Anxjing.AI:记录C++阶段性学习一​zhuanlan.zhihu.com

C# list删除 另外list里面的元素_C++ vector和list的区别

Anxjing.AI:DesignPatterns C++:单例模式​zhuanlan.zhihu.com

C# list删除 另外list里面的元素_C++ vector和list的区别

Anxjing.AI:C++基础:map简析​zhuanlan.zhihu.com

C# list删除 另外list里面的元素_C++ vector和list的区别

Anxjing.AI:C++基础:memset函数简析​zhuanlan.zhihu.com

C# list删除 另外list里面的元素_C++ vector和list的区别

Anxjing.AI:C++基础:break&continue区别​zhuanlan.zhihu.com

C# list删除 另外list里面的元素_C++ vector和list的区别

Anxjing.AI:C++基础:指针和引用的区别​zhuanlan.zhihu.com

C# list删除 另外list里面的元素_C++ vector和list的区别

Anxjing.AI:C++中::和:, .和->的作用和区别?​zhuanlan.zhihu.com

C# list删除 另外list里面的元素_C++ vector和list的区别

Anxjing.AI:string中c_str()的使用方法和特性​zhuanlan.zhihu.com

C# list删除 另外list里面的元素_C++ vector和list的区别

Anxjing.AI:C ++ strcpy()和strncpy()函数​zhuanlan.zhihu.com

C# list删除 另外list里面的元素_C++ vector和list的区别

Anxjing.AI:C++基础-关键字virtual​zhuanlan.zhihu.com

C# list删除 另外list里面的元素_C++ vector和list的区别

Anxjing.AI:C++基础-函数重载​zhuanlan.zhihu.com

C# list删除 另外list里面的元素_C++ vector和list的区别

Anxjing.AI:C++基础-static​zhuanlan.zhihu.com

C# list删除 另外list里面的元素_C++ vector和list的区别

Anxjing.AI:C++基础:判断文件是否存在的方法​zhuanlan.zhihu.com

C# list删除 另外list里面的元素_C++ vector和list的区别

Anxjing.AI:C++基础-strstr查找子串​zhuanlan.zhihu.com

C# list删除 另外list里面的元素_C++ vector和list的区别

Anxjing.AI:C++基础:std::thread多线程​zhuanlan.zhihu.com

C# list删除 另外list里面的元素_C++ vector和list的区别

Anxjing.AI:C++抽象类​zhuanlan.zhihu.com

C# list删除 另外list里面的元素_C++ vector和list的区别

继续阅读