处理 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&lt;std::vector&lt;float&gt; &gt;::size_typestd::vector&lt;float&gt;::size_type 很可能是同一类型。如果需要(C++11 及更高版本),您可以使用auto rows = grid.size(),或者,如果需要,强制编译时约束并在std::vector&lt;std::vector&lt;float&gt; &gt;::size_typestd::vector&lt;float&gt;::size_type 是不同类型时触发诊断。 @Peter 不仅仅是可能。根据定义,它们是同一类型。 @eeronika - 标准没有定义这样的事情。从 C++98 开始的所有 C++ 标准都表明容器的 size_type 能够表示该容器的 difference_type 的所有正值。除了std::array(其大小是size_t 类型的模板参数)之外,没有要求或定义要求size_typestd::size_t 是同一类型。 【参考方案1】:

鉴于std::vector&lt; std::vector&lt;float&gt;&gt;::size 返回std::vector&lt; std::vector &lt;float&gt;&gt;::size_type 类型的值,为什么要使用它来初始化std::vector&lt;float&gt;::size_type 类型的变量?

也就是说,它们是相同的类型,所以差别不大。类型是std::size_t,所以你不妨使用std::size_t rows。或者,如果您想避免出错,让编译器使用auto 推断变量的类型。

【讨论】:

以上是关于处理 vector<vector<float>> 的 size() 时,vector<vector<float>>::size_type 还是 vect的主要内容,如果未能解决你的问题,请参考以下文章

Qt/QML:std::vector<int> 处理

lambda的使用

如何将 std::vector<thrust::device_vector<int>> 转换为 int**?

vector<int>v的v.at(100)函数与v[100] 有何不同

一个自己实现的Vector(只能处理基本类型数据)

使用 std::vector 和内存释放