c++ - 数组中向量的 C++ 代码块问题
问题描述
我无法使用 CodeBlock 20.03 修改向量数组中的向量。这是代码的“简化”版本:
#include <iostream>
#include <vector>
#include <stdio.h>
using namespace std;
vector<int> neighbor_fields[500000];
int main()
{
neighbor_fields[0].push_back(0);
return 0;
}
程序运行良好,但程序完成后显示错误"Terminated with status -1073741510"。我做了一些研究,这个脚本在 C++ 中似乎是完全合法的。
我认为这是与 CodeBlock/compiler(gcn gcc) 相关的问题,因为它在其他地方编译得很好。
谢谢。
编辑: 我已经更正了代码(它应该是向量数组而不是单个向量)。另一个有趣的事情是对单个向量执行 push_back 也会以该错误代码终止:
#include <iostream>
#include <vector>
#include <stdio.h>
using namespace std;
vector<int> neighbor_fields;
int main()
{
neighbor_fields.push_back(0);
return 0;
}
解决方案
这段代码有两个误解:
当你声明
neighbor_fields
你创建了一个容器但你没有在里面放任何东西。因此,如果您尝试访问容器的某个项目,您将得到一个未定义的行为,如果您想让程序更安全,您可以使用std::vector::at
它,它的工作原理就像std::vector::operator[]
但是当索引超出范围时抛出一个异常以便您可以处理它。std::vector::operator[]
返回对容器存储的类型变量的引用,在我们的例子int
中,您不能push_back()
在 int 变量上使用,但可以使用它在容器中添加项目。您正在寻找的代码是std::vector 邻居域;
int main() {
neighbor_fields.push_back(0); return 0;
}
此代码创建一个容器并添加值 0。您可以假设 std::vector 就像类似 c 的数组 so int array[10]
,但可以更改大小添加和擦除项目。
很抱歉代码,但我无法将其标记为我们的代码
推荐阅读
- javascript - React,模态数据仅在第二次打开时正确呈现
- php - PHP:在多步骤注册表单中正确使用会话
- javascript - 检查纬度和经度是否在区域内 - javascript
- mysql - 我如何从 SQL 中获取数据直到某个时间段
- python-3.x - 这种快速排序算法的实现有什么问题?错误是 RecursionError
- mysql - 如何MYSQL比较来自同一列的值
- javascript - 如何使用json中的键删除空值
- c# - 如何使用 request.xml 文件在 C# windows 应用程序中使用soap请求
- php - 从键和级别创建多维数组
- python - Selenium 中是否有任何 API 可以从 chrome 扩展中收集错误?