for loop 的 init-语句,包含两种类型的变量
for loop's init-statement with two types of variable
我想在for的init语句中声明两种类型的变量。像下面的代码一样。我知道"for (string word, int numb,;cin>>词>>麻木。这行不通。只是想让你知道我在做什么。我的目标是声明具有相同生命周期的两种类型的变量,并将它们放在一起。其他编码方式也很有帮助。提前谢谢。
#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;
}
关于你能得到的最接近的是:
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循环;
这不可能。可以在for循环的初始化语句中声明两个基本类型相同的变量,但不能声明两个基本类型不同的变量。你必须在for循环之外声明一个。
我很确定在for语句中声明两种不同类型的两个变量是不可能的,但我也看不出这样做有什么好处:
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循环。
你尝试的方法不是最干净的方法。我想这样做:
string word;
int num;
while(true)
{
cin >> word >> num;
if (!cin.good()) break;
// do some work
}
word
和num
在同一作用域(相同的"寿命")
请注意,您需要将while(true)
替换为一些合适的条件。
如果您希望word和num在循环范围内,请执行如下操作:
while(true)
{
string word;
int num;
cin >> word >> num;
if (!cin.good()) break;
// do some work
}
或
{
string word;
int num;
while(true)
{
cin >> word >> num;
if (!cin.good()) break;
// do some work
}
}
我不知道为什么这是必要的
下面是未经测试的,但应该可以工作:
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;
}
c++17起:
#include <iostream>
#include <tuple>
int main() {
for (auto && [w,i] = std::tuple{std::string{},int{}} ; std::cin >> w >> i ; )
std::cout << "word " << w << " number " << i << "n";
return 0;
}
相关文章:
- C++ 一个函数,可以根据接受的值返回两种类型之一
- C++指针中的这两种类型的值分配有什么区别?
- C++两种类型相互依赖
- 两种类型的构造函数重载
- 没有使用两种类型的字符串进行匹配的函数调用
- 声明具有两种类型的变量:"int char"
- 键入来自不同第三方库的两种类型,无需联合
- 给定这两种类型,我是否可以确定虚拟函数是否已被覆盖?
- 如何在任何两种类型之间reinterpret_cast
- 如何检查两种类型是否相同,忽略const和参考
- 比较两种类型的多组以保持平等
- 这两种类型的结构的写法是一样的吗?
- 两种类型转换有何不同?
- 两种类型的定义构造函数有什么区别?第一个使用":",第二个用大括号(如函数)定义它
- 当两种类型相同时,专用于 C++ 模板函数
- 检查两种类型是否属于同一模板
- 模板结构可容纳两种类型,但当时只有一种
- 如何实现具有两种类型的类之一的类
- 如何在 Cython 中将C++中的模板化函数用于两种类型
- 穿越拥有两种类型值的BST