用C++指向向量的指针

Asi*_*taq -1 c++ pointers vector

我正在努力与矢量.这是我的两个例子.

#include <iostream>
#include <vector>
int main ()
{
    std::vector<int> myvector (5); 
    int* p = myvector.data(); // 0 index address
    *p = 10; // index 0 = 10;
    ++p; // index 0 to 1
    *p = 20; // index 1= 20
    p[2] = 100; // index 2 = 100
    ++p; // as p was in index 1. then ++ goes to index 2.
    *p=49; // index 2 = 49,, and 100 goes on index up
    std::cout << "myvector contains:";

    for (int i=0; i<myvector.size(); i++)
    std::cout << ' ' << myvector[i];

    std::cout << '\n';
return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:(正如我在每个陈述中解释的那样)

10 20 49 100 0
Run Code Online (Sandbox Code Playgroud)

但是当我评论/删除++p&*p=49;然后为什么100仍然在向量中的3个索引?这是令我困惑的例子.

#include <iostream>
#include <vector>
int main ()
{
    std::vector<int> myvector (5); 
    int* p = myvector.data(); 
    *p = 10; // index 0=10;
    ++p; // index 0 to 1
    *p = 20; // index 1 = 20
    p[2] = 100; // index 2 = 100
    std::cout << "myvector contains:";

    for (int i=0; i<myvector.size(); i++)
    std::cout << ' ' << myvector[i];

    std::cout << '\n';
return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

10 20 0 100 0
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释第二输出吗?

Jar*_*d42 8

您的评论p[2] = 100; // index 2 = 100是错误的,因为p索引已经存在,索引3也是1如此p[2].

p[2]相当于*(p + 2).