std::vector 的结构是什么?

Hei*_*erg -4 c++ recursion stdvector

我已经用递归方式打印向量的所有元素,但它返回无意义!它抛出了一个非常奇怪的异常:

Exception thrown: read access violation.
std::vector<int,std::allocator<int> >::operator[](...) returned nullptr.
Run Code Online (Sandbox Code Playgroud)

它输出: 12358000

这是代码。我犯了什么错误?

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

int printVec(vector<int>* foo) {
    if ((*foo).empty())
        return 0;
    else {
        cout << (*foo)[0];
        printVec(foo + 4);
    }
}
int main() {
    vector<int> ref{ 1,2,3,4,5,6,7,8,9,0 };
    printVec(&ref);
}
Run Code Online (Sandbox Code Playgroud)

Bat*_*eba 5

foo是一个指向 a 的指针std::vector<int>

foo + 4在指针算术中添加 4 个sizeof(std::vector<int>)to foostd::vector在那个位置没有 a ,所以 的行为printVec(foo + 4)是未定义的。

该表达式(*foo)[0]正在调用 a 上的重载[]运算符,std::vector该运算符访问向量中的第一个元素。如果该位置没有元素,则程序的行为未定义。