【问题标题】:std::vector as raw array [duplicate]std::vector 作为原始数组
【发布时间】:2014-04-18 04:28:59
【问题描述】:

获取std::vector 中第一个元素的地址并像原始数组一样使用它是否安全?数据是否连续对齐?什么 c++ 标准说(c++98 vs c++11)?顺便说一句,这是一种常见的做法吗?

我有一些大小可能会有所不同的数组,以及将指针和元素数量作为参数的函数。使用std::vector 管理数据并同时使用my_func 会很棒。

std::vector<int> my_vector;
void my_func(int* int_ptr, int num_ints);
// ..
my_func(&my_vector[0], my_vector.size());

【问题讨论】:

    标签: c++ stl stdvector


    【解决方案1】:

    C++11(以及 C++03)保证std::vector 中的数据是连续的。这意味着,在您的情况下,&amp;my_vector[0] 可以被认为是指向该数组的第零个元素的指针,并且可以使用普通的指针算术来访问其他元素。最好使用my_vector.data() 来恢复指向第零个元素的指针。

    C++98 几乎可以保证它。

    请注意,对于任何 C++ 标准,std::vector&lt;bool&gt;不是正确的。这是因为std::vector&lt;bool&gt; 被实现为一个特殊的专业化。

    【讨论】:

    • “几乎”?可以加个报价吗?
    • 为了填补空白,C++03从C++98改为保证。
    • 在 c++11 中,使用更简洁的 data() 成员,这种语法很可怕.. :)
    • @Bathsheba 差不多?这是什么意思?
    • 不要添加到这个答案 - 这个问题是重复的。如果您认为可以添加到其现有答案,请发布有关原始问题的答案。
    猜你喜欢
    • 1970-01-01
    • 2013-01-26
    • 1970-01-01
    • 2010-10-21
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    相关资源
    最近更新 更多