最終更新日時(UTC):
が更新

履歴 編集

function
<inplace_vector>

std::inplace_vector::コンストラクタ(C++26)

constexpr inplace_vector() noexcept;                              // (1) C++26

constexpr explicit inplace_vector(size_type n);                   // (2) C++26

constexpr inplace_vector(size_type n, const T& value);            // (3) C++26

template <class InputIterator>
constexpr inplace_vector(InputIterator first, InputIterator last); // (4) C++26

template <container-compatible-range<T> R>
constexpr inplace_vector(from_range_t, R&& rg);                   // (5) C++26

constexpr inplace_vector(const inplace_vector& other);            // (6) C++26

constexpr inplace_vector(inplace_vector&& other)
  noexcept(N == 0 || is_nothrow_move_constructible_v<T>);         // (7) C++26

constexpr inplace_vector(initializer_list<T> il);                 // (8) C++26

概要

inplace_vectorオブジェクトを次に示す通りの要素で初期化する。

  • (1) : デフォルトコンストラクタ。空のinplace_vectorを構築する。
  • (2) : n個の値初期化された要素で構築する。
  • (3) : n個のvalueのコピーで構築する。
  • (4) : イテレータ範囲[first, last)の要素で構築する。
  • (5) : Rangergの要素で構築する。
  • (6) : コピーコンストラクタ。
  • (7) : ムーブコンストラクタ。
  • (8) : 初期化子リストの要素で構築する。

効果

  • (1) : デフォルトコンストラクタ。要素を持たない空のinplace_vectorオブジェクトを構築する。
  • (2) : n個のT()値初期化された要素を保持したinplace_vectorオブジェクトを構築する。
  • (3) : valueのコピーをn個要素として保持したinplace_vectorオブジェクトを構築する。
  • (4) : イテレータ範囲[first, last)の要素をコピーしたinplace_vectorオブジェクトを構築する。
  • (5) : Range rgの要素からinplace_vectorオブジェクトを構築する。
  • (6) : コピーコンストラクタ。otherと同じ要素を保持したinplace_vectorオブジェクトを構築する。
  • (7) : ムーブコンストラクタ。otherの各要素をムーブしてinplace_vectorオブジェクトを構築する。
  • (8) : 初期化子リストの要素からinplace_vectorオブジェクトを構築する。

例外

  • (1) : 投げない
  • (2), (3), (4), (5), (8) : 要素数がNを超える場合、bad_alloc例外を送出する。

計算量

  • (1) : 定数時間
  • (2), (3) : nに対して線形時間
  • (4) : distance(first, last)に対して線形時間
  • (5) : ranges::distance(rg)に対して線形時間
  • (6) : other.size()に対して線形時間
  • (7) : other.size()に対して線形時間
  • (8) : il.size()に対して線形時間

備考

  • ムーブコンストラクタ(7)は、vectorの定数時間のムーブとは異なり、各要素を個別にムーブするため線形時間である。これはinplace_vectorの内部配列が動的確保メモリを使用していないためである。

#include <print>
#include <inplace_vector>
#include <algorithm>

int main()
{
  std::inplace_vector<int, 5> first;
  std::inplace_vector<int, 5> second(4, 100);
  std::inplace_vector<int, 5> third(second.begin(), second.end());
  std::inplace_vector<int, 5> fourth(third);
  std::inplace_vector<int, 5> fifth = {1, 2, 3};

  std::print("first: ");
  for (int x : first) std::print("{} ", x);
  std::println("");

  std::print("second: ");
  for (int x : second) std::print("{} ", x);
  std::println("");

  std::print("third: ");
  for (int x : third) std::print("{} ", x);
  std::println("");

  std::print("fourth: ");
  for (int x : fourth) std::print("{} ", x);
  std::println("");

  std::print("fifth: ");
  for (int x : fifth) std::print("{} ", x);
  std::println("");
}

出力

first:
second: 100 100 100 100 
third: 100 100 100 100 
fourth: 100 100 100 100 
fifth: 1 2 3 

バージョン

言語

  • C++26

処理系

参照