使用 vector<int>::size_type 和普通整数有什么区别?

What is difference of using vector<int>::size_type and a normal integer?

本文关键字:整数 什么 区别 lt vector int gt 使用 size type      更新时间:2023-10-16

我是 c++ stl 语言的初学者。我想知道这两个代码之间的区别.我问我的朋友,但他说两者都是一样的。谁能解释一下这两者是否相同。 并解释为什么这些是不同的

#include <iostream>
#include <vector>
using namespace std;
int main(){
    vector<double> student_marks(20);
    for (vector<double>::size_type i = 0; i < 20; i++){
        cout << "Enter marks for student #" << i+1
             << ": " << flush;
        cin >> student_marks[i];
    }
    return 0;
}

#include<iostream>
#include<vector>
using namespace std;
int main(){
    vector<double> student_marks(20);
    for (int i = 0; i < 20; i++)
    {
        cout << "Enter marks for student #" << i+1
             << ": " << flush;
        cin >> student_marks[i];
    }
    return 0;
}

vector<T>::size_type是一个依赖于实现的类型,通常size_t。由于它不是由标准指定的,并且可能会更改,因此在处理该类型的元素时,您应该更喜欢使用它。例如,vector<T>::size()的类型返回一个vector<T>::size_type。因此,如果要使用整数索引遍历vector,则可能希望此索引的类型为 vector<T>::size_type 。这将确保您的代码易于维护 - 如果您决定使用标准库的不同实现,您的代码将是一致的。

size_type

容器定义的常见typedef之一。碰巧的是,STL中的大小通常是size_t类型,这是一种无符号整数类型,能够存储理论上可能的任何类型的对象的最大大小。

该值很可能与 int 兼容,但正确的做法是始终使用 size_type 进行矢量索引。这保证始终有效(当然索引不应大于vector.size())。
如果你试图比较无符号和有符号类型(比如上面的int),你可能会得到不可预测的结果,因为有符号类型会转换为无符号类型。