循环的范围和语法 我正在通过Stroustrup的C++编程原理书,我已经谈到了循环的范围。这里给出的代码是给出的直接例子,但是我希望有人能对循环中实际发生的事情有所了解。
循环的范围和语法 我正在通过Stroustrup的C++编程原理书,我已经谈到了循环的范围。这里给出的代码是给出的直接例子,但是我希望有人能对循环中实际发生的事情有所了解。,c++,loops,for-loop,vector,C++,Loops,For Loop,Vector,int main() { vector<double> temps; // temperatures for (double temp; cin>>temp; ) // read into temp temps.push_back(temp); // put temp into vector // compute mean temperature: double sum = 0; for (int x :
int main()
{
vector<double> temps; // temperatures
for (double temp; cin>>temp; ) // read into temp
temps.push_back(temp); // put temp into vector
// compute mean temperature:
double sum = 0;
for (int x : temps)
sum += x;
cout << "Average temperature: " << sum/temps.size() << '\n';
// compute median temperature:
sort(temps); // sort temperatures
cout << "Median temperature: " << temps[temps.size()/2] << '\n';
}
intmain()
{
向量temps;//温度
对于(双温);cin>>temp;)//读入温度
temps.push_back(temp);//将temp放入向量
//计算平均温度:
双和=0;
用于(整数x:temps)
总和+=x;
coutfor(int x:temps)
表示向量temps
中的每个元素,让我们将其命名为x
,并使用x
for(int x:temps)
表示向量temps
中的每个元素,让我们将其命名为x
,并使用x
执行一些操作,您可以按如下方式读取(int x:temps
)“对于temps
中的每个元素x
。换句话说,x
的值是从temps
的元素分配的,循环在向量上迭代时,一次分配一个
还请注意,intx
应该是double x
,因为temps
的元素是double
s。您可以按如下方式读取(intx:temps
)“对于temps
中的每个元素x
。换句话说,x
的值是从temps
的元素分配的,循环在向量上迭代时,一次分配一个
还要注意,intx
应该是double x
,因为temps
的元素是double
s。通常,循环for(声明:range)
的范围相当于
for (auto it = begin(range); it != end(range); ++it)
{
declaration = *it;
// do something
}
(代码简化了,实际上有)
因此,如果将循环变量声明为intx
,并在向量上迭代,则除了得到类型转换double->int
,所有操作都有效:
int x = *it; // 'it' references a 'double'
综上所述,这似乎是本书中的一个错误。您希望for(double x:temp)
正确计算所有内容。通常,循环for(声明:range)
的范围相当于
for (auto it = begin(range); it != end(range); ++it)
{
declaration = *it;
// do something
}
(代码简化了,实际上有)
因此,如果将循环变量声明为intx
,并在向量上迭代,则除了得到类型转换double->int
,所有操作都有效:
int x = *it; // 'it' references a 'double'
综上所述,这似乎是本书中的一个输入错误。您希望for(double x:temps)
正确计算所有内容。在a中,int x
是一个范围声明,temps
是一个范围表达式(在本例中由容器/向量表示)。这意味着变量x
将同时获取存储在temps
向量中的每个值。此外x
应为double
类型,而不是int
,因为temps
是一个双向量:
for (double x : temps) {
sum += x;
}
或者使用auto
说明符,让编译器推断出x
的适当类型:
for (auto x : temps) {
sum += x;
}
如果要修改循环内x
的值,请使用参考类型:
for (auto& x : temps) {
sum += x;
}
对于第一个语句,double temp;
是init语句,cin>>temp;
是一个条件。循环将继续执行temps.push_back(temp);
语句,直到在键盘上按Ctrl+D时条件变为false
请注意,这种使用for循环的方式可能会有些混乱。在a中,int x
是一个范围声明,temps
是一个范围表达式(在本例中由容器/向量表示)。这意味着变量x
将同时获取存储在temps
向量中的每个值。此外x
应为double
类型,而不是int
,因为temps
是一个双向量:
for (double x : temps) {
sum += x;
}
或者使用auto
说明符,让编译器推断出x
的适当类型:
for (auto x : temps) {
sum += x;
}
如果要修改循环内x
的值,请使用参考类型:
for (auto& x : temps) {
sum += x;
}
对于第一个语句,double temp;
是init语句,cin>>temp;
是一个条件。循环将继续执行temps.push_back(temp);
语句,直到在键盘上按Ctrl+D时条件变为false
请注意,这种使用for循环的方法可能会有点混淆。它应该是双精度的;这一定是一个可能导致截断的错误。变量应该只是在向量上迭代。它应该是双精度的;这一定是一个可能导致截断的错误。变量应该只是在向量上迭代呃向量。