我是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;
}
答案 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),则可能会得到不可预测的结果,因为已签名的类型将转换为无符号类型。