std :: vector size?

Pre*_*rag 7 c++ vector std initializer-list c++11

程序:

#include<vector>

int main() {
    std::vector<int>::size_type size=3;
    std::vector<int> v{size};
}
Run Code Online (Sandbox Code Playgroud)

编译时

g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Run Code Online (Sandbox Code Playgroud)

生成错误:

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]
Run Code Online (Sandbox Code Playgroud)

http://www.cplusplus.com/reference/stl/vector/vector/上写了

explicit vector ( size_type n, const T& value= T(), const Allocator& = Allocator() );
Run Code Online (Sandbox Code Playgroud)

我期望使用构造函数.

有人可以解释一下吗?

Pra*_*ian 19

您没有调用将向量设置为初始大小的构造函数.

std::vector<int> v{size};
Run Code Online (Sandbox Code Playgroud)

上面创建了一个vector包含int值的单个元素size.你正在调用这个构造函数:

vector( std::initializer_list<T> init, const Allocator& alloc = Allocator() );
Run Code Online (Sandbox Code Playgroud)

括号初始化列表被推导为a std::initializer_list<size_type>,然后必须执行缩小转换,因为它vector本身包含ints.

要设置矢量的初始大小,请使用:

std::vector<int> v(size);  // parentheses, not braces
Run Code Online (Sandbox Code Playgroud)

此外,vector您列出的构造函数不再存在,它在C++ 11中被删除,并由以下两个构造函数替换:

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

explicit vector( size_type count );
Run Code Online (Sandbox Code Playgroud)

与cplusplus.com相比,cppreference.com是一个更好的参考.