template <class T>
using Id_block = Pair;
// Теперь Id_block -- то же, что и Pair для любого T.
Kompleks shablon tuzilmalari uchun qisqarishlar kiritish imkoniyatlaridan tashqari, turdagi sinonimlar shablonlari sizga ishlov berish funktsiyalarini, balki hisoblash turlarini belgilashga imkon beradi. Qattiq gapirish, bu boshqa shablonlardan foydalanishni talab qiladi, ammo sinonim shablon turi qulay interfeysni taqdim etadi, ammo agar siz C ++ 14 darajadagi standart kutubxonadan), keyin siz Biz biron bir narsa yozadigan taassurotga ega bo'ling - bu shablonning parametrlari bo'lgan parametrlar va qiymat o'ng tomonda turgan turdagi turdir.
#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!");
Vektorli operatsiyalar
Vektor ob'ektini yaratish
Quyida ba'zi STD dizaynerlaridan foydalanishning misollari: Vektor butun sonlar vektorining misolidan foydalangan holda.
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);
C ++ ning boshqa turlari singari, vektorlar vaqtincha qiymatlar sifatida yaratilishi mumkin, bu dizaynerni aniq keltirib chiqaradi. Masalan, ma'lum bir vektor tarkibining ushbu qiymatlar to'plamiga teng bo'lgan qiymatga teng bo'lishi mumkin:
// Используем последний конструктор из примера выше.
vector vl { 1, 2, 3, 4 };
// Повторно используем тот же конструктор
// для создания временного объекта с заданным содержимым.
// Обратите внимание -- необходимо указывать тип элемента вектора (здесь int).
assert(( vl == vector { 1, 2, 3, 4 } ));
assert(( vl != vector { 2, 3, 4 } ));
|