STL矢量运算符数据

Pau*_*Sen 1 c++ stl vector

当我遇到数据运算符时,我只是在阅读有关向量的内容.在下面的示例中,正在使用数据运算符.

#include <iostream>
#include <vector>

int main ()
{
  std::vector<int> myvector (5);

  int* p = myvector.data();

  *p = 10;
  ++p;
  *p = 20;
  p[2] = 100;

  std::cout << "myvector contains:";
  for (unsigned i=0; i<myvector.size(); ++i)
    std::cout << ' ' << myvector[i];
  std::cout << '\n';

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

myvector contains: 10 20 0 100 0
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么0在100和100的位置向后移动一个位置.如:

  1. p是等值的myvector[0],给定值10.
  2. ++p;现在p指向给myvector[1]定的价值20
  3. 所以之后20,100应该来,为什么会这样0.

Cor*_*mer 7

因为p当你这样做时你已经发生了变异

++p
Run Code Online (Sandbox Code Playgroud)

所以这个操作

p[2]
Run Code Online (Sandbox Code Playgroud)

已经被1个索引所抵消,所以就像你做的那样

p[2 + 1]
Run Code Online (Sandbox Code Playgroud)

原来的地址p

  • @PaulSen用数组做"this this" - "int c [5] = {0}; int*p = c;*p = 10; ++磷;*p = 20; p [2] = 100;` - 将产生完全相同的结果. (3认同)
  • @PaulSen` ++ p`引入了额外的偏移量 (2认同)
  • @PaulSen这与`std :: vector`无关,只要你使用`data`访问原始数组,典型的数组和指针语义就在游戏中. (2认同)