c++ - 在 for 循环中使用 auto vs decltype(vec.size()) 处理字符串向量
问题描述
教自己一些使用向量和字符串的细节。为此,我将一个段落输入标准输入,将每个单词存储在字符串向量中的一个单独元素中以进行处理。我知道可能有更好的方法来实际处理文本信息,我只是想做一些练习来理解更多。所以,我在处理向量的循环中有几个选择。我在源代码中找到的两种方法是使用auto
声明和decltype
声明。两者似乎与我相当,但decltype
在我眼中有点笨拙且可读性差。有什么特别的理由使用一个与另一个?是不是更有优势?一个更安全吗?或者,明确声明是否有任何优点/缺点size_type
在循环?这是我的一些代码,每个代码用于说明,但我相信你们中的大多数人都明白我在说什么。
#import <iostream>
#import <string>
#import <vector>
int main()
{
std::vector<std::string> vec;
std::string input;
while(std::cin >> input)
vec.push_back(input);
//auto for loop
for(auto i = 0; i != vec.size(); ++i)
{
//processing
}
//decltype for loop
for(decltype(vec.size()) i = 0; i != vec.size(); ++i)
{
//processing
}
return 0;
}
解决方案
在这种情况下,问题auto
是它会变成int
,这是有符号的 VS 无符号的size
。即使它不会因为您使用!=
而导致任何比较问题,但如果您出于某些原因<
想再次比较,您可能最终会在循环中遇到问题。size
对于该decltype
版本,对于这种情况来说它是矫枉过正的。通常decltype
会使用 with template 代替,因为它当时不知道确切的类型。因此,这种情况下最好的方法应该是unsigned
or std::size_t
。
推荐阅读
- angular - 子组件不向父组件发出输出
- java - 在值内设置一段 html 代码
- python - 如何在 DRF 中更新来自外部 api 的响应
- jquery - 为什么每秒切换一次在附加功能中不起作用?
- spring - Spring Cloud Gateway 的全局异常处理
- r - R Vignette 在内部包功能上失败
- javascript - 按元素 ID 切换日历组件中的类突出显示每个月的相同日期
- javascript - React 组件未更新 redux 状态存储中映射(数据结构)的更改
- sublimetext3 - 如何在 SublimeText-Markdown 中更改 wrap_width?
- laravel - groupBy 正在删除急切加载的关系?