【发布时间】:2018-08-13 08:22:31
【问题描述】:
我在一些非常著名的 C++ 书籍中看到了 --
vector<int> ivec;
for (vector<int>::size_type i = 0; i != 10; ++i) {
ivec.push_back(i);
ivec.push_back(i); // duplicate copies of each number
}
我想知道为什么在这里使用vector<int>::size_type。他们不是
将i 与向量的大小进行比较。意图是插入10个int's
矢量,所以int i = 0 是正确的做法,不是吗?
vector<int>::size_type 将是 typedef 对于 std::size_t 反过来将
是unsinged int,但这里我们将int 存储在vector 中。
请澄清我对vector<int>::size_type的理解。在上面的for循环中使用它公平吗?
【问题讨论】:
-
一般情况下使用
ptrdiff_t,例如命名为Size。这是一个签名类型,因此您可以避免在代码中引入错误的简单促销。此外,您还避免了在尝试使用size_type定义时过度吸引错误的代码复杂性(恕我直言,现代 C++ 编码中盲目一致性的最愚蠢的方面;这都是负值,被认为是相反的)。跨度> -
我同意
int是这里更自然的选择。但是,重要的是您的循环不会导致溢出。如果你写了一个类似的循环,但使用i != x而不是i != 10,并且x可能大于INT_MAX,那么你必须小心。 -
在我看来这太迂腐了,只需使用 int 作为日常向量,您不需要 2GB 向量,并且在极少数情况下您发现自己需要它,您非常清楚需要付费无论如何都要特别注意。
-
@Pavan Manjunath 我已经经历过这个,我的问题是 - 在代码中使用它是否公平?我认为这不公平,但我想澄清(赞同)我的理解。