【问题标题】:vector<vector<float>>::size_type or vector<float>::size_type when dealing with vector<vector<float>>'s size()?处理 vector<vector<float>> 的 size() 时,vector<vector<float>>::size_type 还是 vector<float>::size_type?
【发布时间】: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 是同一类型。

标签: c++ c++11 size-type


【解决方案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 推断变量的类型。

【讨论】:

    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    相关资源
    最近更新 更多