Это выглядит простым, но я смущен: путем я создаю вектор сотни, скажем, int
s
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);
куда я передаю свое собственное средство выделения, также работаю?
Вы все делаете неправильно. Просто создайте его как автоматический объект, если все, что вам нужно, это вектор в текущей области и времени
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.
}
Вы создаете вектор
из ста элементов. Как видно из второго примера кода, который вы выложили:
explicit vector ( size_type n, const T& value= T(), const Allocator& = Allocator() );
Этот конструктор принимает количество элементов для помещения в vector
и avalue
, которое будет вставлено в вектор n
раз. Если вы не укажете значение
, то значение
будет построено с помощью конструктора по умолчанию вашего типа вектора T
. Здесь это будет конструктор "по умолчанию" int
, который инициализирует его в 0 (не существует такого понятия, как конструктор по умолчанию int
, однако стандарт C++ говорит, что int
инициализируется в 0 в таких случаях).
Чтобы (возможно) уточнить:
Чтобы создать векторный объект с именем v из 100 элементов:
std::vector <int> v( 100 );
здесь используется конструктор вектора, который принимает размер (100) в качестве первого параметра. Чтобы создать динамически выделяемый вектор из 100 элементов:
std::vector <int> * p = new std::vector<int>( 100 );
, который использует точно такой же конструктор.