template <class T>
using Id_block = Pair;
// Теперь Id_block -- то же, что и Pair для любого T.
#include
#include // C++14, conditional_t, is_same
using namespace std;
// Выбор встроенного целочисленного типа, имеющего ширину,
// не менее Bits бит, или void, если подходящего типа нет.
template
using Uint =
conditional_t<(Bits <= 8), uint8_t,
conditional_t<(Bits <= 16), uint16_t,
conditional_t<(Bits <= 32), uint32_t,
conditional_t<(Bits <= 64), uint64_t,
void>>>>;
// Проверка условия, выполняемая во время компиляции.
static_assert(is_same, uint32_t>::value, "Uint is flawed!");
vector ve; // пустой вектор
assert(ve.empty());
vector vn(10); // вектор размера 10
// vn создаёт объекты со значением, возвращаемым конструктором без параметров,
// для встроенных типов чисел это 0
assert(!vn.empty());
assert(vn.size() == 10);
assert(vn[0] == 0);
vector vi(10, 42); // вектор из 10 значений, равных 42
// в качестве второго параметра можно указать конкретное значение
// создаваемых объектов
assert(vi.size() == 10);
assert(vi[0] == 42);
int arr[] { 1, 2, 3, 4, 5 };
vector va(arr + 1, arr + 4); // копия диапазона массива
// va содержит 3 элемента: 2, 3, 4
assert(va.size() == 3);
assert(va[0] == arr[1] && va[1] == arr[2] && va[2] == arr[3]);
// Наконец, вектор можно создать из конкретного набора значений,
// используя фигурные скобки вместо круглых (C++11).
vector vl { 1, 2, 3, 4 }; // можно также ставить "=": vl = { ...
assert(vl.size() == 4);
assert(vl.front() == 1 && vl.back() == 4);
// Используем последний конструктор из примера выше.
vector vl { 1, 2, 3, 4 };
// Повторно используем тот же конструктор
// для создания временного объекта с заданным содержимым.
// Обратите внимание -- необходимо указывать тип элемента вектора (здесь int).
assert(( vl == vector { 1, 2, 3, 4 } ));
assert(( vl != vector { 2, 3, 4 } ));18>
Dostları ilə paylaş: |