首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将数字读入向量

将数字读入向量
EN

Stack Overflow用户
提问于 2012-04-20 04:02:06
回答 2查看 143关注 0票数 0

我正在为此而苦苦挣扎。基本上,我必须先读一个数字:

代码语言:javascript
运行
复制
int n;
scanf("%d", &n);

然后我必须读取一个向量的N个间隔:

代码语言:javascript
运行
复制
vector< vector<int> > intervals;
int a, b;
for (int i = 0; i < n; i++) {
  scanf("%d %d", &a, &b);
  intervals.at(i).at(0) = a;
  intervals.at(i).at(1) = b;
}

使用GDB调试器,我得到这样的结果:

代码语言:javascript
运行
复制
3
1 4
terminate called after throwing an instance of 'std::out_of_range'
  what():  vector::_M_range_check

Program received signal SIGABRT, Aborted.
0x00007ffff7260c35 in raise () from /lib/libc.so.6
(gdb) 

你知道我做错了什么吗?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-20 04:04:23

代码语言:javascript
运行
复制
intervals.at(i).at(0) = a;

是非法的,因为你的向量最初是空的。您可以使用push_back或预分配向量。

我会预先分配向量,因为这不需要在push_back上进一步重新分配

代码语言:javascript
运行
复制
vector< vector<int> > intervals(n);
int a, b;
for (int i = 0; i < n; i++) {
  scanf("%d %d", &a, &b);
  intervals.at(i).push_back(a);
  intervals.at(i).push_back(b);
}
票数 2
EN

Stack Overflow用户

发布于 2012-04-20 04:04:08

您正在使用at来存储到向量中尚不存在的元素。

最简单的解决方法是使用push_back将新元素放入向量中-这就是它设计的目的。你需要使用它两次,因为你有两个维度。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10235852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档