```
constexpr size_type size() const noexcept;
constexpr size_type length() const noexcept;
```

```
constexpr size_type max_size() const noexcept;
```

```
constexpr void resize(size_type n, charT c);
```

```
constexpr void resize(size_type n);
```

```
template<class Operation> constexpr void resize_and_overwrite(size_type n, Operation op);
```

Let

- p be a value of type charT* or charT* const, such that the range [p, p + n] is valid and this->compare(0, k, p, k) == 0 is true before the call.

```
constexpr size_type capacity() const noexcept;
```

```
constexpr void reserve(size_type res_arg);
```

After
reserve(),
capacity()
is greater or equal to the argument of
reserve
if reallocation happens; and
equal to the previous value of
capacity()
otherwise.

Reallocation happens at this point if and only if
the current capacity is less than the argument of reserve().

```
constexpr void shrink_to_fit();
```

```
constexpr void clear() noexcept;
```

```
[[nodiscard]] constexpr bool empty() const noexcept;
```