C++ 初始化一个变量并用 std::cin 赋值
C++ initializing a variable and assigning with std::cin
这可能是一个有点愚蠢的问题,但我在其他任何地方都找不到任何类型的答案。我正在用 C++ 编写代码(我认为至少 11)并且必须使用:
int N;
cin >> N;
我的问题是是否有一种优雅的方式将它写成一行命令?我已经知道我可以删除换行符并将它们放在一行中,但这不会让我在 oneliner 循环中使用它:
for(int i=0; i<10; i++) myVector.push_back();
除了写函数,还可以把初始化和读取放到for
循环的头部:
for (int i = 0, n ; i != 5 && cin >> n ; i++)
x.push_back(n);
这也解决了必须检查 cin >> n
的 return 值以确保正确读取值的问题。
我不认为您的方法是 "best" 方法,您在矢量上推回位置(这太昂贵了)并且您已经知道矢量的位置。
你为什么不这样做:
myVector.resize(10);
for (int i = 0; i < 10; i++) cin >> myVector [i];
但是,如果你不能因为你想使用push_back()
,你为什么不打开大括号并在里面写代码呢?这是怎么回事?
另一种使用算法和迭代器的替代方法:
std::copy_n(std::istream_iterator<int>{std::cin}
,10
,std::back_insert_iterator<std::vector<int>>{myVector});
这可能是一个有点愚蠢的问题,但我在其他任何地方都找不到任何类型的答案。我正在用 C++ 编写代码(我认为至少 11)并且必须使用:
int N;
cin >> N;
我的问题是是否有一种优雅的方式将它写成一行命令?我已经知道我可以删除换行符并将它们放在一行中,但这不会让我在 oneliner 循环中使用它:
for(int i=0; i<10; i++) myVector.push_back();
除了写函数,还可以把初始化和读取放到for
循环的头部:
for (int i = 0, n ; i != 5 && cin >> n ; i++)
x.push_back(n);
这也解决了必须检查 cin >> n
的 return 值以确保正确读取值的问题。
我不认为您的方法是 "best" 方法,您在矢量上推回位置(这太昂贵了)并且您已经知道矢量的位置。 你为什么不这样做:
myVector.resize(10);
for (int i = 0; i < 10; i++) cin >> myVector [i];
但是,如果你不能因为你想使用push_back()
,你为什么不打开大括号并在里面写代码呢?这是怎么回事?
另一种使用算法和迭代器的替代方法:
std::copy_n(std::istream_iterator<int>{std::cin}
,10
,std::back_insert_iterator<std::vector<int>>{myVector});