我想有一个向量z,并且能够以z[i]
或*pz[i]
访问它,其中*pz[i]
指向z[i]
。所以有一组值,但有两种访问方式。指向另一个矢量而不是克隆矢量元素的向量的向量
这是我的代码:
std::vector<double> z;
std::vector<double*> pz;
for (int i = 0; i < 5; i++) {
z.push_back(7+0.01*i);
std::cout << i << " z = " << z << std::endl;
pz.push_back(&z.back());
std::cout << i << " pz = " << pz << std::endl;
std::cout << i << " *pz = " ;
for (int j = 0; j < pz.size(); j++) {
std::cout << " " << *pz[j];
}
std::cout << std::endl;
}
z[1]=17.3;
std::cout << "z[1] = " << z[1] << std::endl;
std::cout << "*pz[1] = " << *pz[1] << std::endl;
*pz[2]=34.1;
std::cout << "z[2] = " << z[2] << std::endl;
std::cout << "*pz[2] = " << *pz[2] << std::endl;
输出:
0 z = vector(1) [ 7 ]
0 pz = vector(1) [ 0x1d00b80 ]
0 *pz = 7
1 z = vector(2) [ 7, 7.01 ]
1 pz = vector(2) [ 0x1d00b80, 0x1d00bc8 ]
1 *pz = 1.50254e-316 7.01
2 z = vector(3) [ 7, 7.01, 7.02 ]
2 pz = vector(3) [ 0x1d00b80, 0x1d00bc8, 0x1d00bf0 ]
2 *pz = 1.50254e-316 7.01 7.02
3 z = vector(4) [ 7, 7.01, 7.02, 7.03 ]
3 pz = vector(4) [ 0x1d00b80, 0x1d00bc8, 0x1d00bf0, 0x1d00bf8 ]
3 *pz = 1.50254e-316 7.01 7.02 7.03
4 z = vector(5) [ 7, 7.01, 7.02, 7.03, 7.04 ]
4 pz = vector(5) [ 0x1d00b80, 0x1d00bc8, 0x1d00bf0, 0x1d00bf8, 0x1d00c60 ]
4 *pz = 1.50254e-316 7.01 7.02 7.03 7.04
z[1] = 17.3
*pz[1] = 7.01
z[2] = 7.02
*pz[2] = 34.1
有3个问题:
- 的
*pz
第一元件被第二按压后未定义。 - 当我分配
z[1]
时,*pz[1]
不再是z[1]
了。 - 当我指定
*pz[2]
时,它不再分配给z[2]
了。
(在我实际的程序我需要有一个载体来访问偶数元素和访问奇数元素的载体,但我不想做一个克隆,并使用更多的内存。)
非常酷的图书馆,它可能是我的问题矫枉过正。这将是我的备份计划 – 2012-03-02 17:33:10