【问题标题】:std vector + default allocator + direct array access?标准向量+默认分配器+直接数组访问?
【发布时间】:2009-11-20 02:18:53
【问题描述】:

如果我使用这样的默认分配器创建 std::vector:

vector<int> myVec = vector<int>();
myVec.push_back(3);
myVec.push_back(5);
myVec.push_back(8);

然后向量是否将实际数据在内部存储到 int 数组中?是否可以获取指向该数组的指针并使用该指针直接对其进行迭代?

【问题讨论】:

    标签: c++ arrays vector


    【解决方案1】:

    是的,向量的设计让你可以做到这一点,使用&amp;myVec[0] 来获得int*。您还可以使用 vector 的迭代器类型,其行为类似。 (指针是有效的随机访问迭代器。)您使用默认分配器或任何其他分配器不会改变任何这些,它是向量接口的必需部分。

    向量是guaranteed 以使用连续存储。特别是从众多结果中,请查看 Stroustrup 本人的this one

    【讨论】:

    • 唯一需要注意的是,如果您添加或删除元素,您可能会导致重新分配,这可能会在内存中移动向量。
    【解决方案2】:

    对于gcc 4.4,此运算符定义为:

    operator[](size_type __n)
    { return *(this->_M_impl._M_start + __n); }
    

    所以,我们可以说项目存储为常规数组,您可以直接访问它们

    已编辑

    【讨论】:

    • 不是我的反对意见,但我确实在回答中添加了最后一段作为回应——您可以直接访问它。
    • 是的,你可以访问它_M_impl._M_start应该指向它。 stackoverflow.com/questions/849168/… 这是同一问题的另一个有用答案
    猜你喜欢
    • 1970-01-01
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多