如何向存储uint64_t固定数组的std::vector插入值并推入std::queue
错误原因
- 原生数组
uint64_t[10]不符合C++标准库容器的元素要求:容器元素必须支持赋值、销毁操作,原生数组无法直接赋值,也没有任何成员方法,所以调用tmp_data[0].insert会直接报错,因为tmp_data[0]是原生数组类型,不存在insert成员函数。 - 类型不匹配:你定义的
vectQueue存储的元素类型是std::vector<uint64_t>,和你要推入的vector<uint64_t[10]>是完全不同的类型,即使前序语法没问题,push操作也会报错。 - 迭代器使用逻辑错误:你代码中
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
相关产品推荐
相关产品推荐

