Инициализация вектора

Я работаю с векторами C ++, с которыми столкнулся следующий фрагмент кода:

#include <iostream>
#include <vector>

using namespace std;

int main()
{
using MyVector = vector<int>;

MyVector vectorA(1);
cout << vectorA.size() << " " << vectorA[0] << endl;

MyVector vectorB(1, 10);
cout << vectorB.size() << " " << vectorB[0] << endl;

MyVector vectorC{ 1, 10 , 100, 1000 };
cout << vectorC.size() << " " << vectorC[3] << endl;
return 0;
}

Почему в этом коде векторный объект определен с использованием ключевого слова? Я не могу понять, почему вектор используется в этом коде с таким подходом.

2

Решение

С using Ключевое слово, которое вы создаете псевдоним MyVector для типа vector<int>, Вы можете прочитать больше об этом здесь: http://en.cppreference.com/w/cpp/language/type_alias
Эффект такой же, как с typedef vector<int> MyVector,

4

Другие решения

Может быть раздражать непрерывный ввод аргументов шаблона, особенно когда они становятся очень длинными. using Синтаксис удобен для краткости и согласованности без необходимости ввода vector<...> каждый раз.

2

В этом случае, using A = B;Использование с помощью позволяет заменить имя типа A на имя типа данных B более контролируемым образом, чем определение макроса, и аналогично, если не идентично typedef,

Намерение состоит в том, чтобы заменить некоторый загадочный бит волшебства термином, более легким для передачи и использования. Здесь вы обычно стремитесь улучшить одну или обе ясности и краткости. Вы пытаетесь сделать что-то более легким для чтения и более простым для ввода.

Пример using MyVector = vector<int>; почти бессмысленно. vector<int> это коротко и ясно. Вы точно знаете, что vector<int> с первого взгляда, так что никакой пользы ясности не получено.

Краткость сомнительна. Целых три символа сохранены. Со временем это сложится, но я не уверен, что это будет соответствовать времени, потраченному другими, ища что MyVector является. К счастью, современные IDE хороши для вас, поэтому вы не тратите время и силы на поиск MyVector.h,

Однако для чего-то вроде using CubeDataIterator = std::list<core::utils::DataRecord<UEI::Cube>>::iteratorДобрая до глаз. Это итератор для данных Cube, что бы там ни было. Но если вы уже знаете, что такое куб, вы качаетесь.

1

Ключевые слова C ++: использование

использование

  • директивы using для пространств имен и декларации using для членов пространства имен
  • использование объявлений для членов класса
  • Псевдоним типа и объявление шаблона псевдонима (начиная с C ++ 11)

В вашем образце

using MyVector = vector<int>;

идентичен:

typedef  vector<int> MyVector;
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector