C++: list、vector、map、 set 对比&&用法

  • 解释
    – List:封装了链表,
    – Vector:封装了数组,
    – Deque:动态将多个连续空间通过指针数组接合在一起,
    – Map:含Key和Key所对应的Value,
    – Set:不包含重复的数据,只含有Key,

  • 对比
    – Vector使用连续内存存储,支持[],List不支持
    – Vector随机访问的速度很快,插入头部元素速度很慢,尾部插入速度很快
    – List随机访问速度慢,插入很快(改变指针指向就可以)
    – Map与Set使用平衡检索二叉树,插入很快
    – Map与Hash_Map区别:Hash_Map使用了Hash算法加快查找过程,但需要更多的内存存放Hash桶元素

  • 使用
    – Vector

	vector<ElemType> c;   		// 创建一个空的vector

   	vector<ElemType> c1(c2); 	// 创建一个vector c1,并用c2去初始化c1

   	vector<ElemType> c(n) ; 	// 创建一个含有n个ElemType类型数据的vector;

   	vector<ElemType> c(n,elem); // 创建一个含有n个ElemType类型数据的vector,并全部初始化为elem;

   	c.~vector<ElemType>(); 		// 销毁所有数据,释放资源;
 
 	c.at(index); 				// 返回指定index位置处的元素
 	c[i];               		// 返回指定index位置处的元素

    c.begin();                  // 返回指向容器最开始位置数据的指针

    c.end();                    // 返回指向容器最后一个数据单元的指针+1

– Vector内存扩展:

容器已经没有空间容纳新插入的元素,由于vector中的元素是连续存放,所以不能随便找个地方存放,于是vector会重新分配一块大的内存,将原来的数据拷贝过来再将原来的空间释放掉,而这部分内存一般情况下比需要存储的数据所需要的内存大,这样当再有元素需要存储时就不需要在开辟内存了

– List

	typedef list<int> LISTINT;
	
	LISTINT listOne;

	LISTINT::iterator i;
    //从前面向listOne容器中添加数据
    listOne.push_front (2);
    listOne.push_front (1);

    //从后面向listOne容器中添加数据
    listOne.push_back (3);
    listOne.push_back (4);

    for (i = listOne.begin(); i != listOne.end(); ++i)
        cout << *i << " ";
    cout << endl;

– Map

	Map<int, string> mapStudent;
	
    map<int, string>::iterator  iter;

    for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++)
	{
       Cout<<iter->first<<”   ”<<iter->second<<end;
	}

	 iter = mapStudent.find(1);

– Set

N/A
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值