Namespaces
Variants

std::inplace_vector<T,N>:: inplace_vector

From cppreference.net
constexpr inplace_vector ( ) noexcept ;
(1) (C++26 起)
constexpr explicit inplace_vector ( size_type count ) ;
(2) (C++26 起)
constexpr inplace_vector ( size_type count, const T & value ) ;
(3) (C++26 起)
template < class InputIt >
constexpr inplace_vector ( InputIt first, InputIt last ) ;
(4) (C++26 起)
template < container-compatible-range < T > R >
constexpr inplace_vector ( std:: 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 || std:: is_nothrow_move_constructible_v < T > ) ;
(7) (C++26 起)
constexpr inplace_vector ( std:: initializer_list < T > init ) ;
(8) (C++26 起)

从多种数据源构造一个新的 inplace_vector

1) 构造一个空的 inplace_vector ,其 data ( ) == nullptr size ( ) == 0
2) 构造一个包含 count 个默认插入元素的 inplace_vector
3) 构造一个包含 count 个元素副本的 inplace_vector ,每个元素的值均为 value
4) 构造一个 inplace_vector ,其内容为范围 [ first , last ) 内的元素。
5) 构造一个 inplace_vector ,其内容来自范围 rg
6) 一个 复制构造函数 。构造一个包含 other 内容副本的 inplace_vector
N > 0 std:: is_trivially_copy_constructible_v < T > 均为 true 时,该构造函数为 平凡复制构造函数
7) 一个 移动构造函数 。使用移动语义构造包含 other 内容的 inplace_vector
N > 0 std:: is_trivially_move_constructible_v < T > 均为 true 时,该构造函数为 平凡移动构造函数
8) 构造一个包含初始化列表 init 内容的 inplace_vector

目录

参数

count - 容器的大小
value - 用于初始化容器元素的值
first, last - 定义待复制元素源 范围 的迭代器对
rg - 用于初始化容器元素的值范围
other - 用作容器元素初始化源的另一个 inplace_vector
init - 用于初始化容器元素的初始化列表
类型要求
-
T 必须满足 DefaultInsertable 要求才能使用重载(2,3)

复杂度

1) 常量。
2,3) count 呈线性关系。
4) std:: distance ( first, last ) 呈线性关系。
5) std :: ranges:: distance ( rg ) 呈线性关系。
6,7) other 的大小成线性关系。
8) init 的大小呈线性关系。

异常

2,3) count > N 则抛出 std::bad_alloc
5) std :: ranges:: size ( rg ) > N 时抛出 std::bad_alloc
8) init. size ( ) > N 时抛出 std::bad_alloc

示例

#include <cassert>
#include <initializer_list>
#include <inplace_vector>
#include <new>
#include <print>
#include <ranges>
int main()
{
    std::inplace_vector<int, 4> v1; // 重载 (1)
    assert(v1.size() == 0 && v1.capacity() == 4);
    std::inplace_vector<int, 0> v2; // 重载 (1),允许 N == 0
    assert(v2.size() == 0 && v2.capacity() == 0);
    std::inplace_vector<int, 5> v3(3); // 重载 (2)
    assert(v3.size() == 3 && v3.capacity() == 5);
    std::println("v3 = {}", v3);
    try
    {
        std::inplace_vector<int, 3> v(4); // 重载 (2),抛出异常:count > N
    }
    catch(const std::bad_alloc& ex1)
    {
        std::println("ex1.what(): {}", ex1.what());
    }
    std::inplace_vector<int, 5> v4(3, 8); // 重载 (3)
    assert(v4.size() == 3 && v4.capacity() == 5);
    std::println("v4 = {}", v4);
    try
    {
        std::inplace_vector<int, 3> v(4, 2); // 重载 (3),抛出异常:count > N
    }
    catch(const std::bad_alloc& ex2)
    {
        std::println("ex2.what(): {}", ex2.what());
    }
    const auto init = {1, 2, 3};
    std::inplace_vector<int, 4> v5(init.begin(), init.end()); // 重载 (4)
    assert(v5.size() == 3 && v5.capacity() == 4);
    std::println("v5 = {}", v5);
    std::inplace_vector<int, 4> v6(std::from_range, init); // 重载 (5)
    assert(v6.size() == 3 && v6.capacity() == 4);
    std::println("v6 = {}", v6);
    std::inplace_vector<int, 4> v7(v6); // 重载 (6)
    assert(v7.size() == 3 && v7.capacity() == 4);
    std::println("v7 = {}", v7);
    assert(v6.size() == 3);
    std::inplace_vector<int, 4> v8(std::move(v6)); // 重载 (7)
    // 注意:移动后 v6 处于有效但不确定的状态。
    assert(v8.size() == 3 && v8.<span class="me

参见

为容器赋值
(公开成员函数)
[static]
返回当前分配存储空间可容纳的元素数量
(公开静态成员函数)
直接访问底层连续存储空间
(公开成员函数)
返回元素数量
(公开成员函数)
(C++17) (C++20)
返回容器或数组的大小
(函数模板)
(C++17)
获取底层数组的指针
(函数模板)