Я работаю с векторами 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;
}
Почему в этом коде векторный объект определен с использованием ключевого слова? Я не могу понять, почему вектор используется в этом коде с таким подходом.
С using
Ключевое слово, которое вы создаете псевдоним MyVector
для типа vector<int>
, Вы можете прочитать больше об этом здесь: http://en.cppreference.com/w/cpp/language/type_alias
Эффект такой же, как с typedef vector<int> MyVector
,
Может быть раздражать непрерывный ввод аргументов шаблона, особенно когда они становятся очень длинными. using
Синтаксис удобен для краткости и согласованности без необходимости ввода vector<...>
каждый раз.
В этом случае, 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, что бы там ни было. Но если вы уже знаете, что такое куб, вы качаетесь.
Ключевые слова C ++: использование
использование
В вашем образце
using MyVector = vector<int>;
идентичен:
typedef vector<int> MyVector;