【问题标题】:How to insert value into vector array如何将值插入向量数组
【发布时间】:2021-12-03 06:52:45
【问题描述】:

我正在尝试创建一个具有固定大小数组的std::vector,该数组接受uint64_t 值,然后将该向量推入std::queue。我可以使用以下方法创建向量: vector<uint64_t[10]> tmp_data(255); 如果我理解正确,它是“一个包含 10 个大小为 255 的数组并接受 uint64_t 值的向量”

int main()
{
    vector<uint64_t[10]> tmp_data(255);
    std::queue<std::vector<uint64_t>> vectQueue;

    // error: request for member ‘insert’ in ‘tmp_data.std::vector<long unsigned int [10]>::operator[](0)’, which is of non-class type ‘__gnu_cxx::__alloc_traits<std::allocator<long unsigned int [10]>, long unsigned int [10]>::value_type’ {aka ‘long unsigned int [10]’}
    tmp_data[0].insert(tmp_data.begin(),7); // I want to insert the value "7" in index 0
    tmp_data[1].insert(tmp_data.begin(),6); // 6 in index 1
    tmp_data[2].insert(tmp_data.begin(),5); // 5 in index 2
    tmp_data[2].insert(tmp_data.begin(),4); // 5 in index 2 (so 4,5)

    // then push to queue
    vectQueue.push(tmp_data);
}

【问题讨论】:

  • 问题标题说push有错误,但问题代码中的错误是insert。这是拼写错误,还是两个调用都导致错误?
  • 我会写 "a vector 包含 255 个 arrays 10 ints"
  • 为了使您的insert() 逻辑有意义,您需要改用std::vector&lt;std::vector&lt;uint64_t&gt;&gt; tmp_data(3);std::queue&lt;std::vector&lt;std::vector&lt;uint64_t&gt;&gt;&gt; vectQueue;

标签: c++ vector queue


【解决方案1】:

错误实际上是完全描述性的:

队列中的“值”是std::vector&lt;uint64_t&gt;,但您尝试插入一个整数。这不起作用 - 整数不是 std::vector&lt;uint64_t&gt;。不太确定你在这里做什么。也许你想要

std::queue<uint64_t, std::vector<uint64_t>> vectQueue;

相反?但老实说,您几乎永远不会想要一个带有 std::vector 作为底层容器的队列 - 这真的效率低下,因为您不断地来回复制数据,分配的频率超出了您的预期,而不是保存任何东西,因为与std::dequestd::queue 默认使用)相比,每次查找仍然至少进行一次内存间接寻址。简单的

std::queue<uint64_t> vectQueue;

会更有意义。你读过documentation on std::queue吗?

我阅读您的问题的次数越多,我就越觉得您对在这里尝试构建的数据结构感到困惑,我想坐下来思考一下实际上应该是什么vector什么queue,阅读这些内容,会让你的生活更轻松:)

【讨论】:

    猜你喜欢
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    • 2017-04-25
    相关资源
    最近更新 更多