You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向存储uint64_t固定数组的std::vector插入值并推入std::queue

错误原因

  1. 原生数组uint64_t[10]不符合C++标准库容器的元素要求:容器元素必须支持赋值、销毁操作,原生数组无法直接赋值,也没有任何成员方法,所以调用tmp_data[0].insert会直接报错,因为tmp_data[0]是原生数组类型,不存在insert成员函数。
  2. 类型不匹配:你定义的vectQueue存储的元素类型是std::vector<uint64_t>,和你要推入的vector<uint64_t[10]>是完全不同的类型,即使前序语法没问题,push操作也会报错。
  3. 迭代器使用逻辑错误:你代码中insert传入的tmp_data.begin()是外层vector的迭代器,不属于内层存储的容器,逻辑不符合预期。

正确实现

根据你的实际需求选择对应方案:

方案1:内层使用动态长度vector(匹配你代码中的插入逻辑)

如果需要支持动态插入元素,内层直接用std::vector<uint64_t>,同时外层vector和队列的类型保持匹配:

#include <vector>
#include <queue>
#include <cstdint>

int main()
{
    // 外层vector包含255个动态长度的uint64_t vector,初始状态下每个内层vector为空
    std::vector<std::vector<uint64_t>> tmp_data(255);
    // 队列存储的类型和tmp_data完全一致
    std::queue<std::vector<std::vector<uint64_t>>> vectQueue;

    // 向内层vector插入元素,调用对应内层vector的begin()获取迭代器
    tmp_data[0].insert(tmp_data[0].begin(), 7);
    tmp_data[1].insert(tmp_data[1].begin(), 6);
    tmp_data[2].insert(tmp_data[2].begin(), 5);
    tmp_data[2].insert(tmp_data[2].begin(), 4); // 插入后tmp_data[2]的元素为[4,5]

    vectQueue.push(tmp_data);
    return 0;
}

方案2:内层使用固定大小数组(符合你最初的固定长度需求)

如果确实需要每个内层容器是固定长度10的uint64_t数组,用STL提供的std::array代替原生数组,std::array符合容器元素要求,支持下标访问,注意固定大小容器不支持插入操作,直接给对应下标赋值即可:

#include <vector>
#include <queue>
#include <array>
#include <cstdint>

int main()
{
    // 外层vector包含255个固定长度为10的uint64_t数组
    std::vector<std::array<uint64_t, 10>> tmp_data(255);
    // 队列存储的类型和tmp_data完全一致
    std::queue<std::vector<std::array<uint64_t, 10>>> vectQueue;

    // 固定大小数组直接通过下标赋值
    tmp_data[0][0] = 7;
    tmp_data[1][0] = 6;
    tmp_data[2][0] = 4;
    tmp_data[2][1] = 5;

    vectQueue.push(tmp_data);
    return 0;
}

内容的提问来源于stack exchange,提问作者jabroni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 11:09:01