处理 vector<vector<float>> 的 size() 时,vector<vector<float>>::size_type 还是 vect
Posted
技术标签:
【中文标题】处理 vector<vector<float>> 的 size() 时,vector<vector<float>>::size_type 还是 vector<float>::size_type?【英文标题】:vector<vector<float>>::size_type or vector<float>::size_type when dealing with vector<vector<float>>'s size()? 【发布时间】:2021-01-26 09:09:10 【问题描述】:code_1:
std::vector< std::vector<float> > grid (5, std::vector<float>(3, 1));
std::vector< std::vector <float> >::size_type rows = grid.size();
或
code_2:
std::vector< std::vector<float> > grid (5, std::vector<float>(3, 1));
std::vector<float>::size_type rows = grid.size();
我应该使用 code_1 还是 code_2 ?为什么? 谢谢!
【问题讨论】:
你应该写auto rows = grid.size();
。你是在问rows
的推断类型是什么?
在两个样本中,第一个在技术上更正确。然而,实际上,std::vector<std::vector<float> >::size_type
和 std::vector<float>::size_type
很可能是同一类型。如果需要(C++11 及更高版本),您可以使用auto rows = grid.size()
,或者,如果需要,强制编译时约束并在std::vector<std::vector<float> >::size_type
和std::vector<float>::size_type
是不同类型时触发诊断。
@Peter 不仅仅是可能。根据定义,它们是同一类型。
@eeronika - 标准没有定义这样的事情。从 C++98 开始的所有 C++ 标准都表明容器的 size_type
能够表示该容器的 difference_type
的所有正值。除了std::array
(其大小是size_t
类型的模板参数)之外,没有要求或定义要求size_type
和std::size_t
是同一类型。
【参考方案1】:
鉴于std::vector< std::vector<float>>::size
返回std::vector< std::vector <float>>::size_type
类型的值,为什么要使用它来初始化std::vector<float>::size_type
类型的变量?
也就是说,它们是相同的类型,所以差别不大。类型是std::size_t
,所以你不妨使用std::size_t rows
。或者,如果您想避免出错,让编译器使用auto
推断变量的类型。
【讨论】:
以上是关于处理 vector<vector<float>> 的 size() 时,vector<vector<float>>::size_type 还是 vect的主要内容,如果未能解决你的问题,请参考以下文章
如何将 std::vector<thrust::device_vector<int>> 转换为 int**?