namespace std {
template <class InputIterator,
class Allocator = allocator<typename iterator_traits<InputIterator>::value_type>>
vector(InputIterator, InputIterator, Allocator = Allocator())
-> vector<typename iterator_traits<InputIterator>::value_type, Allocator>;
}
概要
std::vector
クラステンプレートの型推論補助。イテレータ範囲から推論する。
例
#include <vector>
#include <type_traits>
#include <cassert>
int main()
{
// 初期化子リストから推論
std::vector v1 = {1, 2, 3};
static_assert(std::is_same_v<decltype(v1), std::vector<int>>);
// パラメータ設定済みのvectorからの推論
std::vector v2 = v1;
static_assert(std::is_same_v<decltype(v2), std::vector<int>>);
// 値1を3回繰り返すコンストラクタからの推論。
// v3{3, 1} とすると初期化子リストと見なされてしまうので注意
std::vector v3(3, 1);
static_assert(std::is_same_v<decltype(v3), std::vector<int>>);
assert(v3.size() == 3);
// イテレータ範囲からの推論。
// v4{v1.begin(), v1.end()} とすると、イテレータの初期化子リストと見なされてしまうので注意
std::vector v4(v1.begin(), v1.end());
static_assert(std::is_same_v<decltype(v4), std::vector<int>>);
assert(v4.size() == 3);
}
出力
バージョン
言語
- C++17
処理系
- Clang:
- GCC: 8.1
- Visual C++: ??