2016-07-06 3 views
-1

Я новичок в C++ и пытаюсь выяснить, как использовать vector.Почему мне нужно включить <vector>, чтобы использовать их?

В частности, я хочу знать, когда мне нужно использовать #include<vector>. Я прошу об этом, потому что я видел программы с и без оператора #include, которые используют vector в программе.

+3

Ну, так работает C++. Вы должны включить заголовочные файлы, чтобы получить декларации за то, что вы используете. –

+0

Если вы используете что-то из стандартного заголовка, включите этот заголовок. Делает жизнь приятной и легкой, если вы будете следовать этому поведению. – NathanOliver

+0

Если вы используете директиву '# include' в файле, то это в основном то же самое, что и удаление всего содержимого этого файла с ссылкой в ​​ваш источник. Таким образом, если файл, на который вы ссылаетесь, имеет свои собственные, эти файлы также будут помещены в ваш источник. –

ответ

6

Когда вы видите код, который использует std::vector, но не #include <vector>, этот код не работает. Период.

Возможно, «это так случилось» для работы с конкретными компиляторами/стандартными библиотечными реализациями/платформами/планетами, в зависимости от того, какие другие стандартные заголовки «как раз так случаются» уже включают <vector> для их собственного использования. На это нельзя полагаться.

+0

Иными словами, C++ (даже C++ 17) еще не имеет модулей. –

+1

Вы забыли добавить, что он может работать по вторникам, но не в другие дни :) :) –

+0

ОК спасибо. В дополнение к вашему ответу, как я могу знать, что 'vector' является частью std? я имею в виду, как я могу узнать в будущем, что мне нужно добавить 'std ::' перед некоторым компонентом в моем коде? – Nadavp

0

Вам необходимо включить заголовочный файл, чтобы использовать любой тип данных/функций. Все типы данных и функции в C++ включены в их собственном libraries.If вы не включают в себя библиотеку, программа C++ не будет знать, что вы использовали, потому что он не знает, они даже excist.Its как:

Вы хотите поиграть с собакой Джима, но вы не знаете, кто такой Джим, или что такое собака.

1

Вы можете увидеть код, который не #include <vector>непосредственно. Но если вы проверите предварительно обработанный код, я уверен, вы обнаружите, что этот код сделал, включая заголовок, но косвенно через какой-то другой заголовок.

Это хрупкое, и вы не должны этого делать. Но это не значит, что это не сработает.

2

vector фактически не встроен в C++, это только часть его стандартной библиотеки, которая, как гарантируется, будет доступна вам, если вы используете C++. vector (или, по его полному имени, std::vector) сам реализован на C++.

Написав #include <vector>, вы сообщаете компилятору не только использовать свой собственный код, но и скомпилировать файл с именем vector. Этот файл находится где-то на вашем жестком диске (если вы используете GNU/Linux, вероятно, он находится в /usr/include/c++/[GCC_VERSION]/vector).

Вы не можете использовать std::vector без включения этого файла, потому что компилятор тогда не знает класс под названием std::vector. Компилятор знает только язык C++, а не его стандартную библиотеку!

Если в некоторых программах используется std::vector без включения его заголовочного файла, это связано с тем, что некоторые файлы заголовков, которые они уже включили, имеют #include <vector>. Для этого могут быть веские причины (например, некоторые курсы на C++ поставляются с файлом, который содержит все необходимые заголовки и который используется в первых нескольких уроках). Однако могут быть также стандартные заголовки библиотек, которые включают vector (некоторые реализации iostream делают это). Опираясь на это, это не очень хорошая идея, потому что она отличается от реализации до реализации, поэтому ваша программа может работать в Visual C++ 2010, но она не компилируется в GNU или в более новой версии Visual C++.

Смежные вопросы