首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >std::矢量大小?

std::矢量大小?
EN

Stack Overflow用户
提问于 2012-10-04 04:17:55
回答 1查看 4.3K关注 0票数 7

程序:

代码语言:javascript
复制
#include<vector>

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

在使用

代码语言:javascript
复制
g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3

生成错误:

代码语言:javascript
复制
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/上它是这样写的

代码语言:javascript
复制
explicit vector ( size_type n, const T& value= T(), const Allocator& = Allocator() );

我预计会使用该构造函数。

有人能解释一下吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-04 04:39:02

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

代码语言:javascript
复制
std::vector<int> v{size};

上面创建了一个包含单个int元素的vector,该元素的值为size。您正在调用此构造函数:

代码语言:javascript
复制
vector( std::initializer_list<T> init, const Allocator& alloc = Allocator() );

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

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

代码语言:javascript
复制
std::vector<int> v(size);  // parentheses, not braces

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

代码语言:javascript
复制
vector( size_type count, const T& value, const Allocator& alloc = Allocator());

explicit vector( size_type count );

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

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12716201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档