在for循环中声明vector操作
Declaring in for-loop for vector operations
考虑以下代码:
vector<double> student_grades(20);
for (vector<double>::size_type i = 0; i < student_grades.size(); i++)
{
cout << i << endl;
}
用这种方式声明i
和仅仅声明int i = 0
有什么不同?
用这种方式声明i和int i = 0有什么不同?
它确保使用正确的类型-您假设vector<T>::size_type
总是与int
相同,但这个假设是不正确的。根据具体实现,也可以是unsigned int
、long
、unsigned long
或size_t
。
通过使用vector<T>::size_type
,您的代码在不同的实现之间保持可移植性。
参见vector
size_type
是vector类内部的一个typedef,这使vector
类有机会决定使用什么类型进行索引。int
的最大值为2^31(通常,但不保证-我认为它至少保证为32767)。由于有时我们需要比20亿个元素更大的向量(诚然,我怀疑不是经常如此),因此由类本身指定类型是有用的。
此类型保证覆盖vector
实现本身可以处理的范围。它不会太大[如果您选择在32位系统上使用long long
,它将比您需要的要大],也不会太小。当然,如果你知道你只有10件物品,这可能并不重要。
也几乎总是一个无符号类型。在某些情况下,这使得数组的索引更有效,这也对性能有一点点帮助。
vector<T>::size_type
是std::vector
的static
成员。我不知道为什么有人会用它,因为它可能会导致混乱,我猜。看这里,这个问题已经在SO上得到了回答。
size_type是vector类型的(静态)成员类型。通常情况下,它是std::size_t的类型定义,而std::size_t本身通常也是for的类型定义Unsigned int或Unsigned long.
链接到这个问题
标准容器将size_type定义为类型定义Allocator::size_type (Allocator是模板形参),用于Std::allocator被定义为size_t。
链接到这个问题
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中用vector填充一个简单的动态数组
- vector.resize()中的分配错误
- 使用std::vector的OpenCL矩阵乘法
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 在某些循环内使用vector.push_back时出现分段错误
- 重载操作程序时出错>>用于类中的字符串 memebr
- 对 std::vector 使用嵌套 [ ] 操作
- 对 Vector 元素 (C++) 的push_back操作
- C++:如何将 std::vector 操作转换为 Eigen::VectorXf?
- 调用 vector.erase() 函数时指针操作无效错误
- 如何从原始数组到std::vector执行memcpy等效操作
- std::vector 的复制构造函数是如何操作的?
- 在for循环中声明vector操作
- FlasCC:Vector 之间的互操作。<Number> 和双倍[]
- std::vector<void*>::保留 O(1) 时间操作的参数是什么?
- 是一个std::vector查找,比执行简单操作要快
- vector内存操作中的安全性
- 为什么在执行vector.push_back操作时要调用两次复制构造函数