有人建议我使用指针添加一个我想从一些现有函数传递给另一个函数的向量.我真的很困惑如何从该指针中获取信息.我已经尝试了很多我在这里和那里读过的东西,所以让我展示一下我在说什么.
主要课程:
std::vector<float> * dvertex=NULL; track.calculate(irrelevant stuff,dvertex)
二级程序(跟踪,计算)
track::caclulate(irrelevant stuff,vector<float> * dvertex) { ... vector<float> pos; ... pos filled after some calculations if(! (dvertex==NULL)) { dvertex = &pos1; }
回到小学,除非我弄乱了上面的东西,这里有一些我尝试过的东西
1
(*dvertex).at(0) float z = (*dvertex).at(0)
2
(*dvertex)[0]
和一堆简单的东西没有编译.由于我不确定如何在主程序中从该向量中获取特定值,所以我很困惑.我甚至认为它可能是if(!(dvertex == NULL))位,因此我将其更改为if(dvertex == NULL)但仍然没有快乐.任何帮助将不胜感激.
*编辑/更新*非常感谢大家的帮助,但我担心我仍然做错了.
所以按照我刚刚传递参考的建议:我这样做了:
主
std::vector<float> dvertex; track.calculate( foo,&dvertex);
二级保持不变(有!空检查)
主
std::cout<<dvertex[0]<<std:endl;
(以及实际使用数据的其他尝试)
非常感谢您对我仍然做得不正确的想法.一切都编译好,当程序达到使用dvertex数据的程度时,程序就会冻结.
编辑:最终修复
在我需要的二级课程中
*dvertex = pos1;
代替
dvertex = &pos1;
解决方法
我不确定为什么这些没有为你编译,因为只要指针有效且不为null它们就是有效的:
void f(std::vector<int>* v) { if( v != 0 ) { int n = (*v)[0]; // ok int m = (*v).at(0); // ok int o = v->at(0); // ok } }
但别介意.如果必须更改向量,请使用引用;如果不能,则使用const引用.很少需要通过指针来获取容器.
另外,我建议您检查针对0的指针,而不是NULL,因为有时根据C编译器将NULL定义为(void *)0.但有些人可能会在这里反驳.