list,vector相关函数与区别<<0922

list,vector的相关函数

除了不能使用push_front,以下的操作vector也能够使用,只不过是效率的区别

  1. 插入

     list<string>::iterator it = find(lst.begin(), lst.end(), "tianjin");
     lst.insert(it, "fenghua"); 
     lst.insert(it,3,"beijing");//指定位置插入3个元素
     lst,insert(it,vec.begin(),vec.end())//指定位置插入指定迭代器范围的元素
    
  2. 添加元素

     lst.push_back("hangzhou");
     lst.push_front("tianjin");
    
  3. 删除元素

     lst.erase(it)//删除指定迭代器位置的元素,此时it迭代器失效,若这局在循环体里面,必须在前面加上it = ,
     lst.erase(it1,it2);//删除迭代器给定范围的元素
    
  4. 重置大小

     lst.reserve(10);//可以变小也可以变大(默认构造函数)
     设置之后lst.capacity() = 10,此时如果再push_back一个元素进去,capacit变成20.
    

list和vector的区别

  • vector拥有一段连续的内存空间,因此支持随机存取,如果需要高效的随即存取,而不在乎插入和删除的效率,使用vector。可以使用下标操作([]),迭代器可以进行算术运算(连续),
  • list拥有一段不连续的内存空间(双向链表),因此支持随机存取,如果需要大量的插入和删除,而不关心随即存取,则应使用list。不能使用([]),迭代器只重载了++,指向下一个元素,但由于离散存储,迭代器进行算术运算没法达到想要的目的