第二章 第四节 容器和算法

14 December 2021  |  home page


map vs set

map和set都是C++的关联容器,其底层实现都是红黑树(RB-Tree)。由于 map 和set所开放的各种操作接口,RB-tree 也都提供了,所以几乎所有的 map 和set的操作行为,都只是转调 RB-tree 的操作行为。

STL的allocator

STL 迭代器删除元素

STL的map

STL的组成

map vs multimap

两种map底层均由红黑树实现,所有元素都是pair(key, value),会按照元素键值自动排序。
不同点在于multipmap允许键值重复

vector vs list

迭代器 vs 指针

迭代器不是指针,是类模板,表现的像指针。他只是模拟了指针的一些功能,通过重载了指针的一些操作符,->、*、++、–等。迭代器封装了指针,是一个“可遍历STL(Standard Template Library)容器内全部或部分元素”的对象, 本质是封装了原生指针,是指针概念的一种提升(lift),提供了比指针更高级的行为,相当于一种智能指针,他可以根据不同类型的数据结构来实现不同的++,–等操作。

n个整数的无序数组,找到每个元素后面比它大的第一个数,要求时间复杂度为O(N)

vector<int> findMax(vector<int>num){
  if(num.size()==0)
    return num;
  vector<int>res(num.size());
  int i=0;
  stack<int>s;
  while(i<num.size()){
    if(s.empty()||num[s.top()]>=num[i]){
      s.push(i++);
    }
    else{
      res[s.top()]=num[i];
      s.pop();
    }
  }
  while(!s.empty()){
    res[s.top()]=INT_MAX;
    s.pop();
  }

  for(int i=0; i<res.size(); i++)
    cout<<res[i]<<endl;

  return res;
}

STL里的 resize vs reserve




Hosted on GitHub Pages — Theme by orderedlist