Psl/stl

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
หน้านี้เป็นส่วนหนึ่งของ Problem solving lab

List / iterator

#include <list>
#include <cstdio>

using namespace std;

list<int> lst;

main()
{
  lst.push_back(10);
  lst.push_back(20);
  lst.push_back(30);

  list<int>::iterator i = lst.begin();
  while(i != lst.end()) {
    printf("%d\n", *i);
    i++;
  }
}

erase โดยระบุ iterator

#include <list>
#include <cstdio>

using namespace std;

list<int> lst;

void print_list(list<int>& lst)
{
  list<int>::iterator i = lst.begin();
  while(i != lst.end()) {
    printf("%d\n", *i);
    i++;
  }
}

main()
{
  lst.push_back(10);
  lst.push_back(20);
  list<int>::iterator i20 = lst.end();
  i20--;
  lst.push_back(30);

  print_list(lst);
  printf("-----\n");
  lst.erase(i20);
  print_list(lst);
}

Set

#include <set>
#include <cstdio>

using namespace std;

set<int> iset;

void print_set(set<int>& s)
{
  for(set<int>::iterator i = s.begin();
      i != s.end(); ++i) {
    printf("%d\n", *i);
  }
}

main()
{
  set<int> s;
  s.insert(10);
  s.insert(100);
  s.insert(50);
  s.insert(30);

  print_set(s);

  s.insert(-100);
  printf("%d\n",*(s.begin()));
  s.insert(-200);
  printf("%d\n",*(s.begin()));
  s.insert(-150);
  printf("%d\n",*(s.begin()));

  set<int>::iterator i = s.find(-200);
  if(i != s.end()) {
    s.erase(i);
  }
  printf("%d\n",*(s.begin()));
}

pair / erase

#include <set>
#include <cstdio>

using namespace std;

typedef pair<int,int> int_pair;
set<int_pair> s;

main()
{
  s.insert(make_pair(0,0));

  pair<set<int_pair>::iterator,bool> res = s.insert(int_pair(10,0));

  s.insert(int_pair(15,10));
  s.insert(int_pair(10,7));

  s.erase(res.first);
  
  for(set<int_pair>::iterator i = s.begin();
      i != s.end(); i++) {
    printf("%d, %d\n", i->first, i->second);
  }
}

map

#include <map>
#include <cstdio>

using namespace std;

map<int,int> m;

main()
{
  m[100] = 20;
  m[1000000] = 30;
  m[100]++;
  printf("%d\n",m[100]);
  printf("%d\n",m[1000000]);

  if(m.find(200) != m.end()) {
    m[200] += 10;
  } else {
    m[200] = 1;
  }
  m.insert(make_pair(1000,1000000));
  
  for(map<int,int>::iterator i = m.begin();
      i != m.end(); i++) {
    printf("%d => %d\n",i->first, i->second);
  }
}

lower_bound, upper_bound

ใช้ได้ทั้ง set และ map

#include <map>
#include <cstdio>

using namespace std;

map<int,int> m;

main()
{
  m[100] = 20;
  m[1000000] = 30;
  m[100]++;
  m.insert(make_pair(1000,1000000));
  
  printf("%d\n",m.lower_bound(999)->first);
  printf("%d\n",m.lower_bound(1000)->first);
  printf("%d\n",m.upper_bound(999)->first);
  printf("%d\n",m.upper_bound(1000)->first);
}