【发布时间】:2014-07-18 13:02:23
【问题描述】:
我认为这是一个非常基本的问题,但我无法弄清楚。
我习惯于在 C++ 中使用数组,但我现在开始学习向量。 我正在编写测试代码,遇到了一个问题。
首先,这是我制作的代码:
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int main(){
vector<double> score(10);
for(vector<double>::size_type i=0;i<20;i++) {
cout<<"Enter marks for student #"<<i+1<<":"<<flush;
cin>>score[i];
}
double total = accumulate(score.begin(), score.end(),0);
cout<<"Total score:"<<total<<endl<<"Average score:"<<total/score.size()<<flush;
return 0;
}
在第 9 行的 for 句子中,我将 i 声明为 vector<double>::size_type 类型(因为有人告诉我这样做)。
我用 int 替换了上面所说的类型测试了代码,它工作得非常好。
为什么 vector<double>::size_type 比 int 更受欢迎?
【问题讨论】:
-
您当前的代码超出了向量的范围。如果您将 20 更改为
score.size(),您应该会收到有关有符号和无符号比较的警告。顺便说一句,您不需要调用flush,因为在读取输入之前会刷新输出。 -
我总是使用
std::size_t。我认为这是允许的。如果没有,那么我有一个下午的重构要做! -
@Bathsheba,我所知道的所有实现都使
std::size_t成为类型。当然,可能有一个没有。 -
@chris 我认为它在那里是因为分配器可以更改容器
size_type的类型。有一个不可忽略的可能性是我刚刚梦想的。 -
对不起,20 是我的错误,是 10。我不知道我为什么这样做