C++11 向量的数据方法有一些错误 我使用C++中的矢量数据方法,但是我遇到了一些问题,代码是在Bels:< /P> #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; } #包括 #包括 int main() { std::vector myvector(5); int*p=myvector.data(); *p=10; ++p; *p=20; p[2]=100; std::cout
,因为您正在修改C++11 向量的数据方法有一些错误 我使用C++中的矢量数据方法,但是我遇到了一些问题,代码是在Bels:< /P> #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; } #包括 #包括 int main() { std::vector myvector(5); int*p=myvector.data(); *p=10; ++p; *p=20; p[2]=100; std::cout,c++11,C++11,,因为您正在修改p本身 在++p(我记得你说过这相当于p=p+1)之后,p指向索引1处的元素,因此p[2]从向量的开头指向索引3处的元素,这就是为什么第四个元素被更改的原因。因为您正在修改p本身 在++p(我记得你说过这相当于p=p+1)之后,p指向索引1处的元素,因此p[2]从向量的开头指向索引3处的元素,这就是为什么第四个元素被更改的原因。在++p之后,指针p指向myvector[1] 然后我们有: p[0]指向myvector[1] p[1]指向myvector[2] p[2]指向myv
p
本身
在
++p
(我记得你说过这相当于p=p+1
)之后,p
指向索引1
处的元素,因此p[2]
从向量的开头指向索引3
处的元素,这就是为什么第四个元素被更改的原因。因为您正在修改p
本身
在
++p
(我记得你说过这相当于p=p+1
)之后,p
指向索引1
处的元素,因此p[2]
从向量的开头指向索引3
处的元素,这就是为什么第四个元素被更改的原因。在++p
之后,指针p
指向myvector[1]
然后我们有:
指向p[0]
myvector[1]
指向p[1]
myvector[2]
指向p[2]
myvector[3]
- 在
++p
之后,指针p
指向myvector[1]
然后我们有:
指向p[0]
myvector[1]
指向p[1]
myvector[2]
指向p[2]
myvector[3]
std::vector myvector(5);
// ---------------------
// | 0 | 0 | 0 | 0 | 0 |
// ---------------------
int*p=myvector.data();
// ---------------------
// | 0 | 0 | 0 | 0 | 0 |
// ---------------------
// ^
//p
*p=10;
// ----------------------
// | 10 | 0 | 0 | 0 | 0 |
// ----------------------
// ^
//p
++p;
// ----------------------
// | 10 | 0 | 0 | 0 | 0 |
// ----------------------
// ^
//p
*p=20;
// ----------------------
// | 10 | 20 | 0 | 0 | 0 |
// ----------------------
// ^
//p
p[2]=100;
// -------------------------
// | 10 | 20 | 0 | 100 | 0 |
// -------------------------
// ^ ^
//p[2]
记住p[2]
是用视觉符号表示*(p+2)
的一种较短方式,这很有帮助:
std::vector myvector(5);
// ---------------------
// | 0 | 0 | 0 | 0 | 0 |
// ---------------------
int*p=myvector.data();
// ---------------------
// | 0 | 0 | 0 | 0 | 0 |
// ---------------------
// ^
//p
*p=10;
// ----------------------
// | 10 | 0 | 0 | 0 | 0 |
// ----------------------
// ^
//p
++p;
// ----------------------
// | 10 | 0 | 0 | 0 | 0 |
// ----------------------
// ^
//p
*p=20;
// ----------------------
// | 10 | 20 | 0 | 0 | 0 |
// ----------------------
// ^
//p
p[2]=100;
// -------------------------
// | 10 | 20 | 0 | 100 | 0 |
// -------------------------
// ^ ^
//p[2]
记住
p[2]
是说*(p+2)
是的,唐纳德·克努特的风格。是的,唐纳德·克努特的风格。