1. 关于 \(\rm stl\)\(\rm blogs\)~

2. \(\rm set\)

2.1. \(\mathtt{upper\_bound(),lower\_bound()}\)

  • \(\mathtt{upper\_bound()}\):第一个大于 \(\rm val\) 的数。
  • \(\mathtt{lower\_bound()}\):第一个大于等于 \(\rm val\) 的数。

需要注意的是如果没有符合条件的数就会返回 \(\mathtt{set.end()}\).

2.2. \(\mathtt{swap()}\)

\(\mathtt{swap()}\) 的定义:

/**
 *  @brief  Swaps data with another %set.
 *  @param  x  A %set of the same element and allocator types.
 *
 *  This exchanges the elements between two sets in constant time.
 *  (It is only swapping a pointer, an integer, and an instance of
 *  the @c Compare type (which itself is often stateless and empty), so it
 *  should be quite fast.)
 *  Note that the global std::swap() function is specialized such that
 *  std::swap(s1,s2) will feed to this function.
 */

用法是 \(\mathtt{set\_1.swap(set\_2)}\).

2.3. \(\mathtt{rbegin()}\)\(\mathtt{rend()}\)

返回指向 \(\mathtt{set}\) 末尾的 反向 迭代器,所以取出时要这样写:

set <int> :: reverse_iterator it = s.rbegin();

另外注意 ++ it 此时变成了向前遍历。

2.4. \(\mathtt{count()}\)

复杂度为 \(\mathcal O(\log |S|)\).

2.5. \(\mathtt{erase()}\)

  • erase(position)均摊 线性。
  • erase(val)\(\mathcal O(\log |S|)\).

3. \(\text{multiset}\)

3.1. \(\mathtt{erase()}\)

  • \(\mathtt{erase(}\)\(\mathtt )\):删除这个值的所有元素。
  • \(\mathtt{erase(}\)迭代器\(\mathtt )\):删除这个迭代器指向的元素。

4. \(\text{map}\)

4.1. 查询

  • \(\mathtt{find()}\): 如果不存在这个下标,返回值为 \(\mathtt{map.end()}\)

  • \(\mathtt{count()}\): 如果存在这个下标,返回值为 \(1\),否则为 \(0\)

  • \(\mathtt{map[]}\): 如果存在这个下标,返回值为这个下标的值,否则为 \(0\)

敲黑板:\(\mathtt{map[]}\) 在询问不存在的下标时,第一次会返回 \(0\),但之后会填个东西进下标,之后的查询无论使用哪一种操作都是错的!!!

4.2. 插入

  • \(\mathtt{map[x]=y}\)
  • \(\mathtt{map.insert(make\_pair(x,y))}\)

好像第二种要快一点,因为不用查找。

4.3. \(\mathtt{upper\_bound(),lower\_bound()}\)

  • \(\mathtt{upper\_bound()}\):第一个大于 \(\rm val\) 的键值。
  • \(\mathtt{lower\_bound()}\):第一个大于等于 \(\rm val\) 的键值。

返回迭代器为 it->first 为键值,it->second 为值。

5. \(\rm vector\)

5.1. \(\mathtt{push\_back()}\)\(\mathtt{emplace\_back()}\)

\(\rm Link.\)

5.2. \(\mathtt{swap()}\)

\(\rm vector\)\(\mathtt{clear()}\) 函数并不提供内存释放,而只是清除元素。内存释放需要使用 \(\mathtt{swap()}\).

posted on 2020-08-24 19:23  Oxide  阅读(102)  评论(0编辑  收藏  举报