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

时间:2014-12-25 10:35:46

标签: c++ vector stl

我是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;
}

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:0)

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

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