【STL 1】

来源:互联网 发布:中国软件 编辑:程序博客网 时间:2024/04/29 07:59

1. map操作
MAP里的查找
 map<int , GalaxyMap>::iterator iter = m_Maps.find(id);
 if (iter == m_Maps.end())
 return NULL;

MAP里的清除
M_maps.erase(id);/////清除掉id所在的那个元素,返回的是下一个元素

MAP可以直接用
M_Maps[id] = 1; 来赋值,M_Maps[id]可以是原来MAP中没有的元素
MAP的每个元素都是个PAIR类。
也可用插入:
M_Maps.insert(map<int , GalaxyMap>::value_type(id map1));

value_type表示容器中每个元素所使用的键/值对。

 

根据键值c查找用:find(j键值),根据值查找 用:find_if()

2.向量

赋值:
1 vector<int> v1; vector<int> v2;

V1= v2 //////直接赋值

2.vector<int> v4; 
v4.reserve(10); /////控制V4为10个元素 
v4.insert(v4.begin(), &v1[0], &v[9]); 

3.vector<int> v5(10); 

copy(v5.begin(), &v1[0], &v1[9]);


添加 
Push_back ////添加在尾部
出数组: POP_BACK //////删除最后一个元素

添加也可用 insert( vi.begin()); ////通过具体位置插入

注: 数组下标不能用于想链表中插入元素,只能访问已有元素
删除也可 
m_PartId.erase(m_PartId.begin()+i);/////通过具体位置删除,返回的是下一个元素

清楚所有使用Clear()函数

Reserve( num )函数用于通过传递一个大小参数Num来在向量中保留一个缓冲区。 这个值可以通过调用capacity()检索到。 如果capacity() == reserve()且又有个元素插入数组,则会进行一次内存分配且当前所有的迭代器都将失效。要决定可分配给单个向量的最大内存数量,使用max_size()函数

  Push_front() ,Push_back() ,Pop_front(),Pop_back()用于入队,出队

从数组中删除一个元素的方法

Vector<int> at;
For(Vector<int>::iterator iter = at.begin();iter!=at.end();)
{
  If((*iter)==3)
  {
  Delete(*iter);
  Iter = at.erase(iter);
  }
  Else
{  
  ++Iter;
}
}

 

一般来说z最好用算法来从容器中删除元素,而不是手工迭代来做,如算法:remove_if()

 

reverse_iterator w为反向迭代器。

 

一般在迭代循环里用前置叠加:++iter,e而不是iter++,这样做的好处是提高效率,因为后者需要返回一个当前旧制的拷贝。

 

在其他容器里用erase()删除特定元素,将返回下一个有效位置,而map里erase不返回下一个有效位置。

原创粉丝点击