for循环的init-statement有两种类型的变量

时间:2011-11-11 21:13:26

标签: c++

我想在for的init-statement中声明两种类型的变量。像下面的代码。我知道“for(string word,int numb,; cin>> word>> numb;)”无效。只是想让你知道我想要做什么。我的目标是声明具有相同生命周期的两种类型的变量并将它们组合在一起。其他编码方式也很有用。提前谢谢。

#include <iostream>
#include <vector>
#include <string>
#include <utility>
using namespace std;
int main ()
{
    cout<<"enter a word and a number"<<endl;
    for (string word, int numb, ; cin>>word>>numb; )
    {
        //do some work      
    }
return 0;
}
好吧,我认为这是我能得到的最接近的人。

#include <iostream>
#include <vector>
#include <string>
#include <utility>
using namespace std;
int main ()
{
    vector<pair<string,int> > pvec;
    cout<<"enter a word and a number"<<endl;
    {
        int numb=0; 
        for (string word; cin>>word>>numb; )
            pvec.push_back(make_pair(word,numb));
    }
    cout<<pvec[3].second<<endl;
return 0;
} 

5 个答案:

答案 0 :(得分:6)

这是不可能的。您可以在for循环的initial语句中声明两个相同基本类型的变量,但不能声明两个不同基本类型的变量。你必须在for循环之外声明一个。

答案 1 :(得分:6)

离你最近的是:

int main ()
{
    cout<<"enter a word and a number"<<endl;
    {
        string word;
        for (int numb; cin>>word>>numb; )
        {
            //do some work      
        }
    }
    return 0;
}

额外的大括号限制了word的范围,类似于循环限制numb范围的方式。显然,你可以撤销声明;它可能更好(更对称):

int main ()
{
    cout<<"enter a word and a number"<<endl;
    {
        string word;
        int numb;
        while (cin>>word>>numb)
        {
            //do some work      
        }
    }
    return 0;
}

由于没有增量或初始化操作,代码实际上是一个带有几个声明变量的while循环;这可以达到同样的效果。

答案 2 :(得分:3)

我很确定在for语句中不可能声明2个不同类型的2个变量,但我也没有看到这样做的优点:

int main ()
{
    cout<<"enter a word and a number"<<endl;
    while( cin.good() )
    {
        string word;
        int num;

        cin >> word >> num;
        //do some work      
    }
    return 0;
}

一般来说,我更喜欢使用for循环,其中有一些东西可以计算或至少迭代。其他情况应该使用while或do循环。

答案 3 :(得分:2)

您尝试这样做的方式并不是最干净的方式。我会这样做:

string word;
int num;
while(true)
{
    cin >> word >> num;
    if (!cin.good()) break;
    // do some work
}

wordnum属于同一范围(相同的“生命周期”)

请注意,您希望将while(true)替换为适当的条件。


如果您希望word和num位于循环范围内,请执行以下操作:

while(true)
{
    string word;
    int num;
    cin >> word >> num;
    if (!cin.good()) break;
    // do some work
}

OR

{
    string word;
    int num;
    while(true)
    {
        cin >> word >> num;
        if (!cin.good()) break;
        // do some work
    }
}

我不知道为什么这会是必要的。

答案 4 :(得分:1)

以下是未经测试的,但应该有效:

int main()
{
  std::cout << "enter a word and a number" << endl;
  for (struct { std::string word, int number } vars;
       std::cin >> vars.word >> vars.number;
      )
  {
    //do some work      
  }
  return 0;
}