std :: векторный размер?

Программа:

#include<vector>

int main() {
std::vector<int>::size_type size=3;
std::vector<int> v{size};
}

при компиляции с

g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3

генерирует ошибку:

ppp.cpp: In function ‘int main()’:
ppp.cpp:5:28: error: narrowing conversion of ‘size’ from ‘std::vector<int>::size_type {aka long unsigned int}’ to ‘int’ inside { } [-fpermissive]
ppp.cpp:5:28: error: narrowing conversion of ‘size’ from ‘std::vector<int>::size_type {aka long unsigned int}’ to ‘int’ inside { } [-fpermissive]

и на http://www.cplusplus.com/reference/stl/vector/vector/ это написано

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

Я ожидал, что этот конструктор будет использоваться.

Может кто-нибудь объяснить?

7

Решение

Вы не вызываете конструктор, который устанавливает вектор в начальный размер.

std::vector<int> v{size};

Вышеуказанное создает vector содержащий один int элемент со значением size, Вы вызываете этот конструктор:

vector( std::initializer_list<T> init, const Allocator& alloc = Allocator() );

Список braced-initializer выводится как std::initializer_list<size_type> а затем должно быть выполнено сужающее преобразование, так как vector сам содержит ints.

Чтобы установить начальный размер вектора, используйте:

std::vector<int> v(size);  // parentheses, not braces

Так же vector указанный вами конструктор больше не существует, он был удален в C ++ 11 и заменен следующими двумя конструкторами:

vector( size_type count, const T& value, const Allocator& alloc = Allocator());

explicit vector( size_type count );

cppreference.com это гораздо лучшая ссылка по сравнению с cplusplus.com.

19

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

Других решений пока нет …

По вопросам рекламы [email protected]