如何在 n 行中获取整数直到 \n
Posted
技术标签:
【中文标题】如何在 n 行中获取整数直到 \\n【英文标题】:How to get integers until \n for n number of lines如何在 n 行中获取整数直到 \n 【发布时间】:2021-12-11 03:28:58 【问题描述】:我的意见: 第一个输入是输入将包含的行数
5
7 3 29 0
3 4 3
2 3 4 55 5
2 3
1 2 33 4 5
我的问题是如何将它们存储在向量的向量中......?
我的概念..
.
.
.
cin>>n;
vector<vector<int>>vec;
while(n--)
vector<int>vec2;
for(**Getting input until the line**)
vec2.emplace_back(input);
vec.emplace_back(vec2)
我需要实现获取输入直到行。为此,我想将输入作为字符串获取,并在将其转换为 c_string 后使用 strtok 将值存储在向量 vec2 中......但我需要知道是否有任何有效的方法可以克服这个问题..
【问题讨论】:
您的想法实际上非常准确,因为您并不确切知道一行中有多少个数字。对于初学者来说,做你想做的事情并获得整个字符串会容易得多 - 然后对其进行迭代。通过分隔符遍历字符串的一般答案可以在Here 中找到 【参考方案1】:这是我的建议,YMMV。
-
将每一行读入一个字符串。
使用
istringstream
将字符串中的整数提取到向量中。
字符串处理后,将push_back
向量放入外层向量中。
unsigned int rows;
std::cin >> rows;
std::string text_row;
for (unsigned int i = 0U; i < rows; ++i)
std::getline(cin, text_row);
std::istringstream numbers_stream(text_row);
std::vector<int> row_data;
int number;
while (numbers_stream >> number)
row_data.push_back(number);
vec.push_back(row_data);
【讨论】:
使用emplace_back()
好习惯!
如果emplace_back
比push_back
有优势,那为什么push_back
还在比赛中? push_back
有什么独特的功能吗?
Small nitpick - 我会将getline()
移动到for
循环条件中,以防万一它失败:for (unsigned int i = 0U; i < rows && std::getline(cin, text_row); ++i)
我还将更改外部push_back()
以使用std::move()
以避免不必要的副本:vec.push_back(std::move(row_data));
或者,就像 Zeros 暗示的那样,使用 emplace_back()
代替:auto &row_data = vec.emplace_back(); while (numbers_stream >> number) row_data.push_back(number);
以上是关于如何在 n 行中获取整数直到 \n的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Hive 中构建正则表达式以获取字符串,直到第 N 次出现分隔符