Какой конструктор станд.:: вектор используется в этом случае

Это выглядит простым, но я смущен: путем я создаю вектор сотни, скажем, ints

std::vector  *pVect = new std::vector(100);

Однако рассмотрение станд.:: документация вектора я вижу, что ее конструктор имеет форму

explicit vector ( size_type n, const T& value= T(), const Allocator& = Allocator() );

Так, как предыдущий работает? Делает new назовите конструктора со значением инициализации полученным из конструктора по умолчанию? Если это так, был бы

std::vector *pVect = new std::vector(100, my_allocator);

куда я передаю свое собственное средство выделения, также работаю?

7
задан recipriversexclusion 27 August 2013 в 11:09
поделиться

3 ответа

Вы все делаете неправильно. Просто создайте его как автоматический объект, если все, что вам нужно, это вектор в текущей области и времени

std::vector<int> pVect(100);

Конструктор имеет аргументы по умолчанию для второго и третьего параметров. Таким образом, его можно вызвать только с помощью int. Если вы хотите передать собственный распределитель, вы должны передать второй аргумент, так как вы не можете просто его пропустить

std::vector<int, myalloc> pVect(100, 0, myalloc(some_params));

Специальный пример может прояснить этот вопрос

void f(int age, int height = 180, int weight = 85);

int main() { 
  f(25); // age = 25, height and weight taken from defaults.
  f(25, 90); // age=25, height = 90 (oops!). Won't pass a weight!
  f(25, 180, 90); // the desired call.
}
14
ответ дан 6 December 2019 в 09:59
поделиться

Вы создаете вектор из ста элементов. Как видно из второго примера кода, который вы выложили:

explicit vector ( size_type n, const T& value= T(), const Allocator& = Allocator() );

Этот конструктор принимает количество элементов для помещения в vector и avalue, которое будет вставлено в вектор n раз. Если вы не укажете значение, то значение будет построено с помощью конструктора по умолчанию вашего типа вектора T. Здесь это будет конструктор "по умолчанию" int, который инициализирует его в 0 (не существует такого понятия, как конструктор по умолчанию int, однако стандарт C++ говорит, что int инициализируется в 0 в таких случаях).

0
ответ дан 6 December 2019 в 09:59
поделиться

Чтобы (возможно) уточнить:

Чтобы создать векторный объект с именем v из 100 элементов:

std::vector <int> v( 100 );

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

std::vector <int> * p = new std::vector<int>( 100 );

, который использует точно такой же конструктор.

5
ответ дан 6 December 2019 в 09:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: