指向连续 vector 元素的 C++ 指针是自相矛盾的

标签 c++ pointers vector

我想找出内存中连续 vector 元素位置之间的“距离”。所以我尝试下面的代码

#include <cstdlib>
#include <iostream>
#include <vector>
using namespace std;

int main()
{
    vector<int> vec(3);
    for (int i = 0; i <= 1; i++)
    {
        cout << &vec[i+1] - &vec[i] << endl;
    }
    return 0;
}

不出所料,结果是两个 1。但是,当我尝试打印各个指针时:

vector<int> vec(3);
for (int i = 0; i <= 2; i++)
{
    cout << &vec[i] << endl;
}

结果是

01485048
0148504C
01485050

所以两个连续元素之间的差应该是4。貌似和之前的结果矛盾。这里出了什么问题?

最佳答案

vector 没有什么特别之处。 C++ 指针算法(和迭代器算法)是根据元素完成的。事实上,vec[i+1]vec[i] 是一个元素。

这里的一个元素恰好是 4 个字节,这是您在打印指针的位模式时看到的。您可以使用 sizeof(vec[0])

仔细检查

关于指向连续 vector 元素的 C++ 指针是自相矛盾的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45193455/

相关文章:

c++ - 设置变量的最大可能值 C++

c++ - 模板类和可能的性能问题

c++ - 为什么或在什么情况下,您会在 C++ 中将参数作为引用(或指针)传递给函数?

python - Python 中的线与线相交与 numpy

C++ 在类的成员函数内附加指针 vector 导致奇怪的行为

c++ - 使用通用比较器进行字符串比较

c++ - 如何从另一个 View 设置过滤器?

function - Delphi,传递一个out参数数组

pointers - 通用树指针 ada 的实例化

c++ - 访问 vector 时中止