【发布时间】: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是同一类型。