在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
Using auto vs decltype(vec.size()) in for loop to process vector of strings
自学使用向量和字符串的一些细节。为此,我在标准输入中输入一段文字,将每个单词存储在字符串向量中的一个单独元素中进行处理。我知道可能有更好的方法来处理文本信息,我只是试着做一些练习来了解更多。所以,在处理向量的循环中,我有几个选择。我在源代码中找到的两种方法是使用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
会与模板一起使用,因为它当时不知道确切的类型。因此,对于这种情况,最好的方法应该是unsigned
或std::size_t
。
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 大于65535的C++数组[size]引发不一致的溢出
- 为什么(-1)%vector::size()总是返回0
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 循环中的条件:为什么每次都调用strlen(),而vector.size()只调用一次
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 在函数中使用 const int size 参数创建数组会在 Visual Studio 中抛出错误 C++:表达式的计
- vector.size() 在比较中意外工作
- vector.back() 和 vector[vector.size() - 1] 之间的区别?
- 返回 str vs. str.substr(0,str.size()) 在 leetcode 中给了我不同的输出
- 为什么 GCC 不能假设 std::vector::size 在这个循环中不会改变?
- 为什么"(!v.empty())"比"(v.size() >0)"好?
- 迭代器库中的 std::size() 不适用于传递给函数的 C 样式数组
- std::string.size() 未知行为
- 为什么gmp会在这里与"invalid next size"重新定位一起崩溃?
- Omnet++中的.vec和.sca输出有什么区别?
- 为什么我会"Invalid read of size 8"?(瓦尔格林德)
- vec[i][j] 是否转换为 *(vec + i + j)?
- 从 std::string 到 std::array<char,size> 的 memcopy 额外数据是否是一种未定义的行为?
- 如果 vec.size() == 0,vec.data() 返回什么