如何在 C++ 中使用嵌套向量?

2023-11-21

我正在尝试使用整数向量的向量来构建我正在编写的数独解谜器。

问题一:

如果我要按索引访问二维向量,是否必须首先使用适当的大小对其进行初始化?

例如:

typedef vector<vector<int> > array2d_t;

void readAPuzzle(array2d_t grid)
{
    for(int i = 0; i < 9; i++)
        for(int j = 0; j < 9; j++)
            cin >> grid[i][j];
    return;
}

int main()
{
    array2d_t grid;
    readAPuzzle(grid);
}

会出现段错误。我认为这是因为它试图访问尚未初始化的网格元素?

我已将网格的声明行替换为:

array2d_t grid(9, vector<int>(9, 0));

这似乎消除了这个段错误。这是正确的处理方式吗?

问题2:

为什么当我尝试从 cin 读入网格,然后打印出网格时,网格是空白的?

我使用以下代码来执行此操作:

void printGrid(array2d_t grid)
{
    for (int i = 0; i < 9; i++)
    {
        for (int j = 0; j < 9; j++)
        {
            cout << grid[i][j] + " ";
        }
        cout << endl;
    }
}

void readAPuzzle(array2d_t grid)
{
    for(int i = 0; i < 9; i++)
        for(int j = 0; j < 9; j++)
            cin >> grid[i][j];

    return;
}

int main()
{
    array2d_t grid(9, vector<int>(9, 0));
    printGrid(grid);
    readAPuzzle(grid);
    printGrid(grid);
}

我尝试像这样运行我的程序:

./a.out < sudoku-test

其中 sudoku-test 是包含以下内容的文件:

3 0 0 0 0 0 0 0 0  
5 8 4 0 0 2 0 3 0  
0 6 0 8 3 0 0 7 5  
0 4 1 0 0 6 0 0 0  
7 9 0 0 2 0 0 5 1  
0 0 0 9 0 0 6 8 0  
9 3 0 0 1 5 0 4 0  
0 2 0 4 0 0 5 1 8  
0 0 0 0 0 0 0 0 6  

第一次调用 printGrid() 会给出一个空白网格,而我应该看到一个由 0 组成的 9x9 网格,因为这就是我初始化它的方式。第二个调用应包含上面的网格。然而,两次都是空白。

有人能解释一下吗?


Q1:是的,这是正确的处理方式。但是,请注意,嵌套向量是实现 2D 数组的一种相当低效的方法。一个向量并通过以下方式计算索引x + y * width通常是更好的选择。

Q2A:计算grid[i][j] + " "不会连接两个字符串(因为左侧是 int,而不是字符串),而是将数值添加到指针(字符串“”的第一个字符的内存地址)。使用cout << grid[i][j] << " "反而。

Q2B:您按值传递数组(它被复制)readAPuzzle。函数读入其本地副本,该副本在函数返回时被销毁。通过引用传递(这可以避免制作副本并使用原始文件):

void readAPuzzle(array2d_t& grid)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 C++ 中使用嵌套向量? 的相关文章

  • 在 LINQ 查询中返回不带时间的日期

    我正在编写一个查询 我想计算按日期联系我们的呼叫中心的次数 看起来很简单 但由于联系日期字段是日期时间字段 我得到了时间 因此当我按联系日期 时间 分组时 每个联系日期实例的计数为 1 所以 我想只按日期分组 而不按时间分组 下面是我用来查
  • 属性对象什么时候创建?

    由于属性实际上只是附加到程序集的元数据 这是否意味着属性对象仅根据请求创建 例如当您调用 GetCustomAttributes 时 或者它们是在创建对象时创建的 或者 前两个的组合 在由于 CLR 的属性扫描而创建对象时创建 从 CLR
  • C++:无法使用scoped_allocator_adaptor传播polymorphic_allocator

    我有一个vector
  • Signalr 在生产服务器中总是陷入长轮询

    当我在服务器中托管应用程序时 它会检查服务器端事件并始终回退到长轮询 服务器托管环境为Windows Server 2012 R1和IIS 7 5 无论如何 我们是否可以解决这个问题 https cloud githubuserconten
  • 如何在 Unity 中从 RenderTexture 访问原始数据

    问题的简短版本 我正在尝试访问 Unity 中 RenderTexture 的内容 我一直在使用 Graphics Blit 使用自己的材质进行绘制 Graphics Blit null renderTexture material 我的材
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 在 ASP.Net Core 2.0 中导出到 Excel

    我曾经使用下面的代码在 ASP NET MVC 中将数据导出到 Excel Response AppendHeader content disposition attachment filename ExportedHtml xls Res
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • 如何构建印度尼西亚电话号码正则表达式

    这些是一些印度尼西亚的电话号码 08xxxxxxxxx 至少包含 11 个字符长度 08xxxxxxxxxxx 始终以 08 开头 我发现这个很有用 Regex regex new Regex 08 0 9 0 9 0 9 0 9 0 9
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • 在 ASP.NET 中将事件冒泡为父级

    我已经说过 ASP NET 中的层次结构 page user control 1 user control 2 control 3 我想要做的是 当控件 3 它可以是任何类型的控件 我一般都想这样做 让用户用它做一些触发回发的事情时 它会向
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr

随机推荐

  • 防止 matplotlib 有状态

    如果我创建一个Axes对象在matplotlib并改变它 即通过绘制一些数据 然后我调用一个函数没有通过我的Axes反对该函数那么这个函数仍然可以改变我的Axes 例如 import matplotlib pyplot as plt imp
  • newKieSession 是线程安全的吗?

    我们在项目中使用了 Drools kieSessions 许多线程可以创建新的 kieSession 有时线程在创建会话时可能会挂起 因此问题是 Firstly kieContainer newKieSession 是线程安全的操作吗 被绞
  • 核心数据子上下文不预取关系

    我激活了 Core Data 调试器 com apple CoreData SQLDebug 1在我的应用程序方案中 对于名为 Category 的实体和名为 Image 的关系实体 得到以下结果 主上下文上的 FetchRequest N
  • Protractor 和 Karma 可以一起使用吗?

    If 量角器正在取代 Angular Scenario Runner 进行 E2E 测试 这是否意味着我仍然可以使用它Karma作为我的E2E测试框架 当前 Protractor 维护者不推荐 https github com angula
  • findViewById 不适用于包含?

    我有一个像这样的包含
  • Android:带按钮的 ListView -> OnItemClick 不执行任何操作

    我的问题来自ListView 如果没有按钮 setOnItemClickListenerListView 的效果很好 开始活动 当我将按钮添加到 ListView 的项目中时 按钮是可单击的 但项目并不更可单击 我尝试使用myListVie
  • 减号运算符在 mysql 中给我错误

    我有两个疑问 第一个查询返回 11 行 第二个查询返回 6 行 当我对它们使用减号运算符时 据我所知 它应该返回 5 行 SELECT location from uploads where username Gates MINUS SEL
  • 颤振 - 列中的均匀空间未按预期工作

    问题截图我试图通过使元素之间的间距均匀来将元素放入红色框中 就像给每个人赋予权重 1 一样 为此 我将 mainAxisAlignment MainAxisAlignment spaceEvenly 放在父列中 但它不起作用 Contain
  • MySQL 中使用 InnoDB 进行全文搜索

    我有一个 MySQL 数据库 版本 5 5 28 其中有一个如下表 products InnoDB search id title description 1 Levi Blue Jeans Some cool jeans 2 Gucci
  • Chrome 扩展清单 v3 MV3 身份验证 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我需要使用用于处理 Chrome 扩展上的 Google 登录的清单版本 3 MV3 鉴于文档中仅提到它 我该如何解决这个问题无法完成 目前 对于清单 v3 我们无法使用 goo
  • Linux内核UDP接收时间戳

    我一直在读网络时间戳linux 内核的文档 有一些东西我不清楚 提供的时间戳在哪里SO TIMESTAMPNS生成 在硬件中还是在内核中 如果是这样 一旦产生新数据包的中断 它就会被触发吗 SO TIMESTAMPING还应该允许生成硬件时
  • @angular/[email protected] 安装后脚本失败

    您好 我无法安装 Angular clinpm install g angular email protected 我不断收到这个 gt node bin postinstall script js module js 549 throw
  • 强制关闭带有服务的应用程序:服务中未调用 onDestroy()?

    我已经实现了粘性服务 当我强制关闭应用程序时 我看到 Activity 的 onDestroy 被调用 但该服务显然没有做任何事情 这是日志猫 07 01 22 35 30 397 DEBUG ActivityMine 6505 onDes
  • 如何获取SecondOrDefault?

    我有一个简单的 linq lambda 语句 Interactions new BindableCollection
  • 错误:Bool 不可转换为 Void:

    我正在从 Obj 移动我的代码 C 到 Swift C 并尝试实现 Twitter sdk 但是 我收到错误 任何人都可以告诉我我做错了什么吗 请在这件事上给予我帮助 我花了两天时间尝试了一切 但对我来说没有用 您的块没有 return 语
  • CUDA 启动请求的资源过多

    我在具有计算能力 2 0 的 GTX 480 上运行代码时遇到一些问题 如果我启动每块 1024 个线程的内核 我总是会收到以下错误 CUDA MEMCHECK Program hit cudaErrorLaunchOutOfResourc
  • 使用新的 Scala 反射 API 获取伴随对象实例

    使用 Scala 的新反射 API 是否可以获得对类的伴生对象的引用 我正在思考以下几点 trait Base def companion MetaBase someReflectionMagic this asInstanceOf Met
  • Pandas concat:ValueError:传递值的形状是 blah,索引意味着 blah2

    我正在尝试合并一个 Pandas 14 1 数据框和一个系列 该系列应形成一个新列 其中包含一些 NA 因为该系列的索引值是数据帧索引值的子集 这适用于玩具示例 但不适用于我的数据 详细信息如下 Example import pandas
  • OCaml 是否有像 Python 一样的 String.split 函数?

    我用它来分割字符串 let split Str split Str regexp string in let tokens split instr in 但问题是 例如这里有一个我想解析的句子 pop esi 分割后 它变成了 我使用辅助函
  • 如何在 C++ 中使用嵌套向量?

    我正在尝试使用整数向量的向量来构建我正在编写的数独解谜器 问题一 如果我要按索引访问二维向量 是否必须首先使用适当的大小对其进行初始化 例如 typedef vector