我想找出内存中连续 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/