将向量的向量转换为指针的指针

2024-01-13

假设我有一个 C 库 API 函数,它将指针的指针作为参数。然而,由于我用 C++ 编程,我想利用 std 向量来处理动态内存。如何有效地将向量的向量转换为指针的指针?现在我正在使用这个。

#include <vector>

/* C like api */
void foo(short **psPtr, const int x, const int y);    

int main()
{
    const int x = 2, y = 3;
    std::vector<std::vector<short>> vvsVec(x, std::vector<short>(y, 0));
    short **psPtr = new short*[x];

    /* point psPtr to the vector */
    int c = 0;
    for (auto &vsVec : vvsVec)
        psPtr[c++] = &vsVec[0];

    /* api call */
    foo(psPtr, x, y);        

    delete[] psPtr;
    return 0;
}

这是实现目标的最佳方式吗?在这种情况下,我可以通过使用迭代器或某些 std 方法来摆脱“新删除”的事情吗?提前致谢。

Edit:根据答案,我现在使用这个版本与 C 代码交互。我将其发布在这里。

#include <vector>

/* C like api */
void foo(short **psPtr, const int x, const int y);    

int main()
{
    const int x = 2, y = 3;
    std::vector<std::vector<short>> vvsVec(x, std::vector<short>(y, 0));
    std::vector<short*> vpsPtr(x, nullptr);

    /* point vpsPtr to the vector */
    int c = 0;
    for (auto &vsVec : vvsVec)
        vpsPtr[c++] = vsVec.data();

    /* api call */
    foo(vpsPtr.data(), x, y);        

    return 0;
}

对我来说看起来更像 C++。感谢大家!


这是实现目标的最佳方式吗?

如果你确定向量的向量会比向量更长久psPtr, 好的。否则,您将面临以下风险:psPtr将包含无效指针。

在这种情况下,我可以通过使用迭代器或某些 std 方法来摆脱“新删除”的事情吗?

是的。我建议使用:

std::vector<short*> psPtr(vvsVec.size());

然后使用&psPtr[0]在调用 C API 函数时。这消除了代码中内存管理的负担。

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

将向量的向量转换为指针的指针 的相关文章

  • 我的线程图像生成应用程序如何将其数据传输到 GUI?

    Mandelbrot 生成器的缓慢多精度实现 线程化 使用 POSIX 线程 Gtk 图形用户界面 我有点失落了 这是我第一次尝试编写线程程序 我实际上并没有尝试转换它的单线程版本 只是尝试实现基本框架 到目前为止它是如何工作的简要描述 M
  • 向 ExpandoObject 添加方法时,“关键字 'this' 在静态属性、静态方法或静态字段初始值设定项中无效”

    我尝试向 ExpandoObject 添加一个动态方法 该方法将返回属性 动态添加 给它 但它总是给我错误 我在这里做错了什么吗 using System using System Collections Generic using Sys
  • 如何在 Android NDK 中创建新的 NativeWindow 而无需 Android 操作系统源代码?

    我想编译一个 Android OpenGL 控制台应用程序 您可以直接从控制台启动 Android x86 运行 或者从 Android x86 GUI 内的 Android 终端应用程序运行 这个帖子 如何在 Android NDK 中创
  • 如何使用recv()检测客户端是否仍然连接(并且没有挂起)?

    我写了一个多客户端服务器程序C on SuSE Linux 企业服务器 12 3 x86 64 我为每个客户端使用一个线程来接收数据 我的问题是 我使用一个终端来运行服务器 并使用其他几个终端来运行服务器telnet到我的服务器 作为客户端
  • C++ 异步线程同时运行

    我是 C 11 中线程的新手 我有两个线程 我想让它们同时启动 我可以想到两种方法 如下 然而 似乎它们都没有按照我的预期工作 他们在启动另一个线程之前启动一个线程 任何提示将不胜感激 另一个问题是我正在研究线程队列 所以我会有两个消费者和
  • 从多个类访问串行端口

    我正在尝试使用串行端口在 arduino 和 C 程序之间进行通信 我对 C 编程有点陌生 该程序有多种用户控制形式 每一个都需要访问串口来发送数据 我需要做的就是从每个类的主窗体中写入串行端口 我了解如何设置和写入串行端口 这是我的 Fo
  • 访问者和模板化虚拟方法

    在一个典型的实现中Visitor模式 该类必须考虑基类的所有变体 后代 在许多情况下 访问者中的相同方法内容应用于不同的方法 在这种情况下 模板化的虚拟方法是理想的选择 但目前这是不允许的 那么 模板化方法可以用来解析父类的虚方法吗 鉴于
  • IronPython:没有名为 json 的模块

    我安装了 IronPython 我的 python 文件如下所示 import sys print sys version import json 运行它的代码 var p Python CreateEngine var scope p C
  • C 语言中 =+(等于加)是什么意思?

    我碰到 与标准相反 今天在一些 C 代码中 我不太确定这里发生了什么 我在文档中也找不到它 In ancientC 版本 相当于 它的残余物与最早的恐龙骨头一起被发现 例如 B 引入了广义赋值运算符 使用x y to add y to x
  • Qt 创建布局并动态添加小部件到布局

    我正在尝试在 MainWindow 类中动态创建布局 我有四个框架 它们是用网格布局对象放置的 每个框架都包含一个自定义的 ClockWidget 我希望 ClockWidget 对象在调整主窗口大小时相应地调整大小 因此我需要将它们添加到
  • Azure 事件中心 - 按顺序接收事件

    我使用下面的代码从 Azure Event Hub 接收事件 https learn microsoft com en us azure event hubs event hubs dotnet framework getstarted s
  • 如何重置捕获像素的值

    我正在尝试创建一个 C 函数 该函数返回屏幕截图位图中每四个像素的 R G 和 B 值 这是我的代码的一部分 for int ix 4 ix lt 1366 ix ix 4 x x 4 for int iy 3 iy lt 768 iy i
  • 如何在c#中的内部类中访问外部类的变量[重复]

    这个问题在这里已经有答案了 我有两个类 我需要声明两个类共有的变量 如果是嵌套类 我需要访问内部类中的外部类变量 请给我一个更好的方法来在 C 中做到这一点 示例代码 Class A int a Class B Need to access
  • System.Runtime.InteropServices.COMException(0x80040154):[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在 C 项目中遇到异常 System Runtime InteropServices COMException 0x80040154 检
  • 有没有一种简单的方法可以让 Visual Studio 2015 使用特定的 ToolsVersion?

    使用特定版本构建项目或解决方案时msbuild我可以使用以下命令选择早期的 net 工具链 toolsversion or tv switch C Program Files x86 MSBuild 14 0 bin msbuild tv
  • 在类的所有方法之前运行一个方法

    在 C 3 或 4 中可以做到这一点吗 也许有一些反思 class Magic RunBeforeAll public void BaseMethod runs BaseMethod before being executed public
  • WinRT 定时注销

    我正在开发一个 WinRT 应用程序 要求之一是应用程序应具有 定时注销 功能 这意味着在任何屏幕上 如果应用程序空闲了 10 分钟 应用程序应该注销并导航回主屏幕 显然 执行此操作的强力方法是在每个页面的每个网格上连接指针按下事件 并在触
  • 带重定向标准流的 C# + telnet 进程立即退出

    我正在尝试用 C 做一个 脚本化 telnet 项目 有点类似于Tcl期望 http expect nist gov 我需要为其启动 telnet 进程并重定向 和处理 其 stdin stdout 流 问题是 生成的 telnet 进程在
  • 匿名结构体作为返回类型

    下面的代码编译得很好VC 19 00 23506 http rextester com GMUP11493 标志 Wall WX Za 与VC 19 10 25109 0 标志 Wall WX Za permissive 这可以在以下位置检
  • 错误:无效使用不完整类型“类 Move”/未定义对 Move::NONE 的引用

    拜托 我不知道为什么这个简单的代码被拒绝 它给了我 2 个编译错误 请帮帮我 I use 代码 块 20 03 我的编译器是GNU GCC 移动 hpp class Move public Move Move int int public

随机推荐

  • Jetpack Compose Text 组件中的等宽数字

    我在 Jetpack Compose 应用程序中使用自定义字体 并且希望将特定文本组件中的数字等宽 对于标准 Android TextView 可以使用fontFeatureSetting tnum 属性 https stackoverfl
  • 在 if 条件中声明变量有什么问题?

    也许我已经生疏了 最近一直在用Python编写 为什么这不能编译 if int i f 0 没有 周围的int i f 我得到另一个更合理的错误i不是布尔值 但这就是为什么我首先想要括号 我的猜测是 使用括号将其放入表达式中 并且表达式中不
  • gvim 的类似尾巴的功能

    我想使用 gvim 来查看不断更新的日志文件 这样我总是可以看到最后更新的行 就像 unix 中的 tail 命令一样 是否可以 打开日志文件和 setlocal autoread 有一个插件 尾束 http www vim org scr
  • 如何使用 OkHttp 启用证书固定

    如何使用 OkHttp 为我的 Android Java 应用程序启用证书固定 The OkHttp 文档 http square github io okhttp 3 x okhttp okhttp3 CertificatePinner
  • 文件重命名不起作用

    我正在尝试为选定的文件名添加扩展名JFileChooser虽然我无法让它工作 这是代码 final JFileChooser fc new JFileChooser fc setFileSelectionMode JFileChooser
  • 从 JSP 调用 REST GET 服务

    我有一个动态设置应用程序页面标题的 JSP 但是 我希望能够调用基于系统用户获取用户详细信息的 REST 服务 我已经有了系统用户值 但需要调用后端服务从数据库中获取详细信息 这已经实现了 但我不知道如何设置 JSP 来执行此操作 我不想使
  • 在 Chrome 中的选择输入上使用框阴影

    我目前正在开发一个小型网站 并且我在网站上的各种元素上使用了盒子阴影效果 它似乎适用于所有应用它的元素 在 Chrome 和 Firefox 中 除了select and input 它在 Firefox 中适用于这些输入类型 但在 Chr
  • 在 Windows 中通过 pm2 执行 npm 脚本时出现问题

    我正在尝试跑步npm通过 pm2 使用自定义脚本ecosystem json as apps name Service script npm args run command 不幸的是我无法做到这一点 谁能帮助我解决这个问题 我得到如下所示
  • 更新默认的 nuget 包

    我了解如何更新解决方案中的包 但我的问题是如何更新默认包 IE 当我创建新的解决方案时 它已经是最新版本 而不必在每次启动新项目时都进行 管理解决方案包 和更新 例如 如果我创建一个新的 MVC4 项目 则正在安装 jQuery 1 7 1
  • 如何在android JellyBean 4.2.2中开发自定义状态栏

    我想开发定制的StatusBar 我知道我不是唯一有此要求的人 但还是想知道大家的意见 在 StackOverflow 上进行大量搜索后 我发现人们有 使用工具修改状态栏 但这不是我需要的 我有点在思考自己的Status发展方向 带有我自己
  • CSS 网格在 Safari 中不工作

    我试图弄清楚我正在做的事情是否有问题 或者 Safari MacOS 或 iOS 是否不支持 CSS 网格 尽管他们到处都说支持 CSS 网格 我尝试过这样的事情 ul list style type none text align cen
  • 连接数据表中两列的值

    连接数据表中两列的值两列使其成为数据表中的一列 我的数据表是 TagNumber LogNumber Combined 124 1 2 125 1 3 126 2 4 o p TagNumber 124 1 2 125 1 3 126 2
  • Bluez BLE 外设利用 ADV 数据宣传自定义特性

    是否有一个示例应用程序允许使用特定的 ADV 数据宣传自定义 UUID 和特征 Bluez 的文档较少 任何帮助表示赞赏 您拥有哪个版本的 BlueZ 对于较新版本的 BlueZ 例如 5 50 您可以从命令行使用 bluetoothctl
  • 在自己的类中使用依赖注入(而不是在组件中)?

    在组件中使用 DI 与注入效果很好 inject 或在代码隐藏中使用 inject 现在如果你想在普通类中使用 DI 如何工作呢 我在这里发现了完全相同的问题 Blazor 从 C 类调用 JavaScript https stackove
  • 如何将嵌套的 XML 元素解组到数组中?

    我的 XML 包含预定义元素的数组 但我无法选取该数组 XML 结构如下 var xml data
  • 如何使用VBA将公式添加到单元格[重复]

    这个问题在这里已经有答案了 我正在尝试编写一些 VBA 它将标题文本添加到 3 个单元格 然后将公式一直填充到最后一行 我已经写了下面的内容 其中写入标题没有问题 但是当它到达我的第一个时 Formula它抛出一个 应用程序定义或对象定义错
  • 字符串数组上的 jQuery.unique

    的描述jQuery unique http api jquery com jQuery unique 状态 对 DOM 元素数组进行就地排序 并删除重复项 请注意 这仅适用于 DOM 元素数组 不适用于strings或数字 考虑到描述 有人
  • 不使用循环更改单元格范围的内部颜色

    如何使这项工作有效 Range Cells 1 1 Cells height width Interior Color colorArray colorArray 是包含颜色值的长度 宽度 高度 长整型的一维数组 上面的代码返回 类型不匹配
  • 授权和 Web API 调用结束后如何从 Spotify 注销用户

    我使用 Spotify Web API 来获取播放列表和用户曲目列表 授权工作正常 我也确实得到了曲目详细信息 但之后我想从 Spotify 注销用户并允许新登录 用户自动从 Spotify 帐户注销之前有一个会话时间 但用户可能没有耐心等
  • 将向量的向量转换为指针的指针

    假设我有一个 C 库 API 函数 它将指针的指针作为参数 然而 由于我用 C 编程 我想利用 std 向量来处理动态内存 如何有效地将向量的向量转换为指针的指针 现在我正在使用这个 include