在for循环中使用auto vs decltype(vec.size())来处理字符串的向量

Using auto vs decltype(vec.size()) in for loop to process vector of strings

本文关键字:size vec 处理 向量 字符串 decltype 循环 for vs auto      更新时间:2023-10-16

自学使用向量和字符串的一些细节。为此,我在标准输入中输入一段文字,将每个单词存储在字符串向量中的一个单独元素中进行处理。我知道可能有更好的方法来处理文本信息,我只是试着做一些练习来了解更多。所以,在处理向量的循环中,我有几个选择。我在源代码中找到的两种方法是使用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,它是从size有符号VS无符号的。尽管由于使用!=而不是<,它不会引起任何比较问题,但如果出于某些原因想再次与size进行比较,则可能会在循环中出现问题。对于decltype版本来说,这对于这种情况来说太过分了。通常decltype会与模板一起使用,因为它当时不知道确切的类型。因此,对于这种情况,最好的方法应该是unsignedstd::size_t