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

ihm*_*ihm 1 c++

我想在for-init声明中声明两种类型的变量.像下面的代码.我知道"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;
}
Run Code Online (Sandbox Code Playgroud)

好吧,我认为这是我能得到的最接近的建议.

#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;
} 
Run Code Online (Sandbox Code Playgroud)

Nat*_*ate 6

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


Jon*_*ler 6

你可以得到的最近的是:

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

额外的大括号限制了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;
}
Run Code Online (Sandbox Code Playgroud)

由于没有增量或初始化操作,代码实际上是一个带有几个声明变量的while循环; 这实现了相同的结果并且有效.