欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++中的vector、list和vector的区别、set的用法与区别以及迭代器iterator

程序员文章站 2022-03-22 19:16:02
...

vector封装数组,list封装了链表,map和set封装了二叉树

1.vector

初始化:vector<int> test       vector<int> test(n,0) (n不用初始化,可cin输入或者读入文件) 初始化长度为n,元素值全部为0。

sort: sort(test.begin(),test.end())       //test中的元素按从小到大排列

#include <algorithm>
bool cmp(int a,int b){
    return a>b;
}
sort(vec.begin(),vec.end());   //  按升序排序
sort(vec.begin(),vec.end(),cmp); // 按降序排序

find:查找某一元素最先出现的位置。用法:

vector<int>::iterator a=find(test.begin(),test.end(),a)

int index = distance(test.begin(),a);        //index就是元素a在vector中的下标

插入元素:尾部插入:test.push_back(a);  在某一位置插入元素:vec.insert(vec.begin()+index,a); 在下标为index处插入a.

删除元素:尾部删除:test.pop_back(a);  删除某一位置的元素:vec.erase(vec.begin()+2);   删除下标为2的元素,即vec[2],且后面元素自动前移一个位置。 vec.erase(vec.begin()+i,vec.begin()+j);   删除区间[i,j-1]的元素;

2.vector和list的区别:

    (1)vector拥有连续的内存空间,能高效的随机存取,时间复杂度为o(1)(test[1])。插入和删除元素时会造成内存块的拷贝,时间复杂度为o(n)。vector<int>::iterator支持“+”,“+=”,“<”等操作符。

    (2)list是由双向链表实现的,内存空间不连续,只能通过指针访问数据,随机存取的时间复杂度为o(n),链表能高效的插入和删除元素。list的内存空间可以是不连续,它不支持随机访问,因此list<int>::iterator则不支持“+”、“+=”、“<”等。

    因此,如果需要高效的随机存取,而不在乎插入和删除的效率,使用vector;如果需要大量的插入和删除,而不关心随机存取,则应使用list。

3.set   (特点:每个元素的值是唯一的,自动进行升序排列,不需要内存拷贝和内存移动,元素以节点方式存储,节点结构类似链表)   头文件:#include<set>

初始化:set<int>  a;

find:   set<int>::iterator it=a.find(1);       int index=distance(a.begin(),it);   //在集合a中查找元素1的下标index。 set中的查找为二分查找。

插入元素:a.insert(插入的元素);    set会自动排序,

删除元素:a.erase(5)  //删除set中值为5的元素                          a.erase(it)         //删除迭代器it对应的元素

4.iterator:

    迭代器实际上是对“遍历容器”这一操作进行了封装。在编程中我们往往会用到各种各样的容器,但由于这些容器的底层实现各不相同,所以对他们进行遍历的方法也是不同的。例如,数组使用指针算数就可以遍历,但链表就要在不同节点直接进行跳转。      指针能指向函数而迭代器不行,迭代器只能指向容器;指针是迭代器的一种。指针只能用于某些特定的容器;迭代器是指针的抽象和泛化。所以,指针满足迭代器的一切要求。

5.string

find:    string a ="asdfkjl";            int index=a.find('k')      //查找字符串a中字符‘k’的下标,找不到返回-1

插入元素:

        末尾插入元素:a=a+'a'  |  a=a+"asfd";

        在中间插入一个元素: a.insert(a.begin()+1,'a')     //将元素‘a’插入字符串,下标为1

删除元素:

        删除某个下标的元素:  a.erase(a.begin()+1)     //删除下标为1的元素

相关标签: c