stl - Gakgu/Gakgu.github.io GitHub Wiki

κ°œμš”

C++μ—μ„œ μ“°μ΄λŠ” Standard Template Library.

C++ 11 이전

map

νŠΉμ§•

  • key, value 둜 κ΅¬μ„±λ˜μ–΄ μžˆλ‹€.

예제

#include <map>
#include <iostream>
using namespace std;

int main()
{
  map<const char*, double> m;
  pair key_value = pair("pi", 3.14);
  m.insert(key_value);

  cout << m["pi"];

  return 0;
}

C++ 17

any

νŠΉμ§•

  • λͺ¨λ“  μžλ£Œν˜•μ„ 담을 수 μžˆλ‹€.
  • shared_ptr의 속성을 κ°€μ§€κ³  μžˆλ‹€.
  • 볡사 κ°€λŠ₯ν•œ 자료만 담을 수 μžˆλ‹€.

예제

#include <any>
#include <iostream>

int main()
{
  std::any ret1 = 1;
  std::any ret2 = "asdf";

  std::cout
    << std::any_cast<int>(ret1) << "\n"
    << std::any_cast<const char*>(ret2) 
        << std::endl;

  return 0;
}

variant

νŠΉμ§•

  • 곡용체 ν˜•μ‹μœΌλ‘œ μ§€μ •λœ νƒ€μž…μ˜ λ³€μˆ˜λ₯Ό 담을 수 μžˆλ‹€.
  • 동적 할당을 μ‚¬μš©ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— any보닀 속도가 λΉ λ₯΄λ‹€.

예제

#include <variant>
#include <string>
using namespace std;

int main()
{
  variant<int, string> ret = "asdf";

  string str = get<string>(ret);
  // int i = get<int>(ret); // Error

  string* pstr = get_if<string>(&ret);
  int* null_pointer = get_if<int>(&ret);

  bool equal_type_false = holds_alternative<int>(ret);
  bool equal_type_true  = holds_alternative<string>(ret);

  return 0;
}

optional

νŠΉμ§•

  • 값이 μ‘΄μž¬ν•˜μ§€ μ•ŠμŒμ„ λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.

예제

#include <optional>
#include <iostream>

int main()
{
  std::optional<int> ret1 = 1;
  std::optional<int> ret2 = {};

  std::cout
    << ret1.value() << "\n"
    << ret1.value_or(100) << "\n"
    << ret2.value_or(100) << std::endl;

  return 0;
}
⚠️ **GitHub.com Fallback** ⚠️