vector传参

豆子DXS 2018-12-06 02:29:29
vector作为函数参数返回,在函数体把vector作数组,在主函数中调用此函数,发现vector的值没有传过来。有大神可以举例分析一下吗?第一次写代码,很多不懂,网上找资料没找到想要的回答。
...全文
1097 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
penghuahuijuan 2018-12-11
  • 打赏
  • 举报
回复
直接传递参数为形参,会另外分配内存空间,相当于一个单独的变量。
要改变原始参数的值,需要引用或者指针访问原始参数。
豆子DXS 2018-12-11
  • 打赏
  • 举报
回复
@啃馒头
我是属于看书看了忘,就只能逼自己写程序改bug学习,但是就是很多基础知识不懂,到处碰壁,都不知道怎么学编程,请前辈给些学编程的意见
啃馒头 2018-12-10
  • 打赏
  • 举报
回复
形参 ,是单向传递啊,编程的基本原理啊 ,不能返回参数的,我建议你,设置个全局变量,在函数中返回。
或者设置非安全模式,用指针的方式,这样也可以。
返回参数变量 还一个很不好的编程习惯
要改掉
豆子DXS 2018-12-09
  • 打赏
  • 举报
回复
谢谢大家帮我,就是vector使用错误造成,成局部变量后就传不出去了,我再改改代码
_ZGq 2018-12-09
  • 打赏
  • 举报
回复

vector<int> func();

这样不行吗?
(如果想快一点,用
vector<int>& func();
传引用的方式)
qq_33316323 2018-12-08
  • 打赏
  • 举报
回复
引用 8 楼 豆子DXS 的回复:
void defect( Mat cable, float gradient_size, float pixel_num, float mindet_area, int sec_graythreshold, int *defect_num, vector<vector<double>>&detect_matrix)
{。。。。。。。。。。。。。。。。。。
if (*defect_num == 0)
{
vector<vector<double>> detect_matrix(1, vector<double>(1,0.0));
}
else
//if (*defect_num != 0.0)
{
vector<vector<double>> detect_matrix(*defect_num, vector<double>(5,0.0));
for (cable_idx_0 = 0; cable_idx_0 <*defect_num; cable_idx_0++)
{
。。。。。。。。。。。。。。。。。。
}
}
detect_matrix.clear();
}

这样用是不是导致我的detect_matrix数据在其他.cpp文件中根本调用不到

vector<vector<double>> detect_matrix(1, vector<double>(1,0.0));
这样你的detect_matrix就被局部变量detect_matrix覆盖了。不能多次使用构造函数,你可以自己往里面装,或者查一下vector的api。
豆子DXS 2018-12-08
  • 打赏
  • 举报
回复
void defect( Mat cable, float gradient_size, float pixel_num, float mindet_area, int sec_graythreshold, int *defect_num, vector<vector<double>>&detect_matrix)
{。。。。。。。。。。。。。。。。。。
if (*defect_num == 0)
{
vector<vector<double>> detect_matrix(1, vector<double>(1,0.0));
}
else
//if (*defect_num != 0.0)
{
vector<vector<double>> detect_matrix(*defect_num, vector<double>(5,0.0));
for (cable_idx_0 = 0; cable_idx_0 <*defect_num; cable_idx_0++)
{
。。。。。。。。。。。。。。。。。。
}
}
detect_matrix.clear();
}

这样用是不是导致我的detect_matrix数据在其他.cpp文件中根本调用不到
  • 打赏
  • 举报
回复
引用 6 楼 豆子DXS 的回复:
@zjq9931 我就是跟踪的数据,最底层的detect_matrix中的数据就是没有传出来,vector<vector<double>> detect_matrix(*defect_num, vector<double>(5)); 可以这样多次声明类型并改变容器大小吗?
多次声明的是不同的变量。是局部变量。不是传进来的参数。问题就在这里了。
豆子DXS 2018-12-06
  • 打赏
  • 举报
回复
@zjq9931
我就是跟踪的数据,最底层的detect_matrix中的数据就是没有传出来,vector<vector<double>> detect_matrix(*defect_num, vector<double>(5)); 可以这样多次声明类型并改变容器大小吗?
@风轻云淡_ 2018-12-06
  • 打赏
  • 举报
回复
引用 1 楼 zjq9931 的回复:
函数的参数要用引用
比如:
声明:
void foo(vector<int> &abc);

实现:
void foo(vector<int> &abc)
{
abc[0]=1;
}
这样就可以了。
莫要误人子弟啊
  • 打赏
  • 举报
回复
引用 1 楼 豆子DXS 的回复:
@zjq9931 void defect( ,,,,,,,,,,,vector<vector<double>>&detect_matrix)//最底层函数 { .................................... if (epoint_num < 3 && abnormal_point_num < 3) { vector<vector<double>> detect_matrix(1, vector<double>(1)); ............................................ } else {......................... vector<vector<double>> detect_matrix(*defect_num, vector<double>(5)); ........................................... } } void cable_get(,,,,,, vector<vector<double>>&detect_matrix)//第2层 { ................................. defect(,,,,,,, detect_matrix); .............................. } int main()主函数 {............................. cable_get( ,,,,detect_matrix); ............................... } 我这样使用vector是不是有问题,我第2层函数cable_get读取不到最底层defect函数传过来的detect_matrix
单从这里看是没有问题的,你要跟踪看看
豆子DXS 2018-12-06
  • 打赏
  • 举报
回复
@zjq9931
void defect( ,,,,,,,,,,,vector<vector<double>>&detect_matrix)//最底层函数
{ ....................................
if (epoint_num < 3 && abnormal_point_num < 3)
{
vector<vector<double>> detect_matrix(1, vector<double>(1));
............................................
}
else
{.........................
vector<vector<double>> detect_matrix(*defect_num, vector<double>(5));
...........................................
}
}
void cable_get(,,,,,, vector<vector<double>>&detect_matrix)//第2层
{ .................................
defect(,,,,,,, detect_matrix);
..............................
}
int main()主函数
{.............................
cable_get( ,,,,detect_matrix);
...............................
}
我这样使用vector是不是有问题,我第2层函数cable_get读取不到最底层defect函数传过来的detect_matrix
AlbertS 2018-12-06
  • 打赏
  • 举报
回复
引用 1 楼 zjq9931 的回复:
函数的参数要用引用
比如:
声明:
void foo(vector<int> &abc);

实现:
void foo(vector<int> &abc)
{
abc[0]=1;
}
这样就可以了。
  • 打赏
  • 举报
回复
函数的参数要用引用 比如: 声明: void foo(vector<int> &abc); 实现: void foo(vector<int> &abc) { abc[0]=1; } 这样就可以了。
1. CameraFade(摄像机的渐隐) 其中Camera或者场景的东西并没有消失,只是在屏幕上贴了一张贴图 首先,要用到摄像机的渐隐/显功能的话,必须调用CameraFadeAdd()函数,来添加背景图片,不然在运行时会包错。 下面来讲解一下CameraFade里面需要用到的几个函数 1) CameraFadeAdd() //当不传参的时候,会默认一个黑色的背景 CameraFadeAdd(Texture2D texture) //摄像机视图渐隐后显示texture CameraFadeAdd(Texture2D texture,int depth) //同上,depth的作用暂时不知道,猜测与分层有关,可能类似PS中的图层 2)CameraFadeDepth(int depth) //改变刚才texture的depth 3)CameraFadeDestroy() //移除并摧毁 4)CameraFadeTo(float amount,float time) 从当前视图转换到前面设置的视图(texture) //amount透明度,介于0~1之间。等于1 时Texture完全覆盖Camera视图 //time是达成该效果需要多少秒 CameraFadeTo(Hashtable args) //用哈希表可以设置更详细的内容 此函数的哈希表key有:name,amount,time,delay,easetype,looptype,onstart等,KEY作用以及值参考提供的EXCEL文档中的HASHTABLE项 5)CameraFadeFrom(float amount,float time) CameraFadeTo(Hashtable args) //从前面设置的视图(texture)转换到当前视图,参数参考CameraFadeTo 6)CameraTexture(Color color) //创建一个单色的用于CameraFade的texture2d 2. Audio音频 同CameraFade一样,itween中对音频的控制也并没有结束音频的播放,而是控制的音频的音量(volume)和音调(pitch)。音频文件赋值到某个GO上,将GO给函数传参 1)AudioTo(GameObject target, float volume, float pitch, float time) //target为挂载音频的对象,volume/pitch为最终要达到的音量/音调(volume的值为0~1),达到目的所需的时间 AudioTo(GameObject target, Hashtable args) //hashtab参数:name,audiosource,volume,pitch,time,delay,easetype,looptype,onstart等 其中Audiosource是你挂载音频的物体 2)AudioFrom(GameObject target, float volume, float pitch, float time) AudioFrom(GameObject target, Hashtable args) 这个就不详解了,就一个FROM和TO的区别,参数都一样 3)AudioUpdate(GameObject target, float volume, float pitch, float time) AudioUpdate(GameObject target, Hashtable args) a)这个函数主要用在那种会循环调用的函数里面,比如系统的Update()函数,它会不断的降低音量音调来接近你设置的那个值,降低那个差值会递减。 b)这里需要注意的是,即使使用hashtable也只有以下这几个参数: audiosource,volume,pitch,time 3. Color(颜色) 函数类似上面的audio,具体参数解析,可以参考excel文档中的color hashtable 函数有以下几个: 1)ColorFrom(GameObject target, Hashtable args) ColorFrom(GameObject target, Color color, float time) 2)ColorTo(GameObject target, Hashtable args) ColorTo(GameObject target, Color color, float time) 3)ColorUpdate(GameObject target, Color color, float time) ColorUpdate(GameObject target, Hashtable args) 在这里会引入一个比较特别的新的参数,NamedValueColor,这是一个枚举变量,有一下几个值:_Color,_SpecColor,_Emission,_ReflectColor具体意义可以参考EXCEL 文件 4. Draw(画线)的几个函数区别 DrawLine(Vector3[] path) DrawLine(Vector3[] path, Color color) DrawLine(Transform[] path) DrawLine(Transform[] path,Color color) DrawLineGizmos DrawLineHandles DrawPath DrawPathGizmos DrawPathHandles PathLength //返回路径长度 这些函数必须放在OnDrawGizmos()里面使用。OnDrawGizmos()和Start()一样直接放在脚本类内部的最外层。DrawPath的效果是在编辑器内部可以看到,但是运行时没有的 每个函数的参数和DrawLine()一样,就不一一列举了。 其中DrawLine是画直线而DrawPath是画曲线路径,也是物体移动的实际路径。 函数以Gizmos结尾的和没有的效果一样,而以Handles结尾的暂时有一个不兼容的问题,不能用,这样算下来,这几个函数里面有用的也就三个: DrawLine() DrawPath() PathLength() 在这里还有一个函数,用于给你的路径上的画一个线圈,方便观察 Gizmos.DrawWireSphere(Vector3 position,float radius); //参数一为位置,参数二为半径 效果如图: 5. 物体渐隐(FadeTo,FadeFrom,FadeUpdate) 主要是对物体的alpha通道值进行改变,使物体逐渐透明。 这里要注意的是,需要改了shader参数,这个效果才会生效。首先你给物体添加一个Material后,选中物体,查看inspector视图,在Material处你会看到一个shader选项,点击选择transparant->Diffuse 6. 物体朝向(LookFrom,LookTo,LookUpdate) 1)LookFrom(GameObject target, Vector3 looktargetposition, float time) LookFrom(GameObject target, Hashtable args) 2)LookTo(GameObject target, Vector3 looktargetposition, float time) LookTo(GameObject target, Hashtable args) 前两个函数的哈希表参数如下: name,looktarget,axis,time,speed,delay,easetype,looptype,onstart等,具体的可以参考EXCEL文件 3)LookUpdate(GameObject target, Hashtable args) LookUpdate(GameObject target, Vector3 looktargetposition, float time) 用于循环函数,如Update()中,使物体一直朝向looktargetposition, 7. 移动(Move*) 1)MoveAdd(GameObject target, Vector3 amount, float time) MoveAdd(GameObject target, Hashtable args) 2)MoveBy(GameObject target, Vector3 amount, float time) MoveBy(GameObject target, Hashtable args) 3)MoveFrom(GameObject target, Vector3 position, float time) MoveFrom(GameObject target, Hashtable args) 4)MoveTo(GameObject target, Vector3 position, float time) MoveTo(GameObject target, Hashtable args) 5)MoveUpdate(GameObject target, Vector3 position, float time) MoveUpdate(GameObject target, Hashtable args) 这几个函数的不使用哈希表作为参数的时候没有区别,但是当引入哈希表的时候,movefrom和moveto可以根据一个vector3序列(path)进行运动,而moveadd和moveby只能点对点运动,moveby和moveadd这两个函数经过测试,我表示他们没区别,当然要是你发现他们之间的区别的时候,记得联系我告诉我哦,大家相互学习嘛。Moveupdate和其他**update原理一样,就不讲了,具体的参数也都比较好理解,哈希表参数可以参考我的EXCEL文档 Moveupdate的哈希表参数只有: position,x,y,z,orienttopath,looktarget,looktime,axis,islocal,time (PS:参数之间有的是不能同时为真的哦,比如orienttopath和looktarget) 8. 暂停itween(Pause) 当某itween被赋予“ignoreTimeScale”时,无法暂停 函数比较简单,我就直接贴在下面了: Pause(GameObject target) //暂停gameobject上的所有itween Pause(GameObject target, bool includechildren) //暂停gameobject上的所有itween,是否包括孩子 Pause(GameObject target, string type) //暂停gameobject上的,某个类型的所有itween Pause(GameObject target, string type, bool includechildren) //暂停gameobject上的,某个类型的所有itween,是否包括孩子 Pause() //暂停场景中的所有itween 9. Resume继续 就和上面的暂停一个样,就不详细讲了 Resume(GameObject target) Resume(GameObject target, bool includechildren) Resume(GameObject target, string type) Resume(GameObject target, string type, bool includechildren) Resume() 10. Stop停止 就和上面的暂停一个样,就不详细讲了 Stop() Stop(string type) Stop(GameObject target) Stop(GameObject target, bool includechildren) Stop(GameObject target, string type) Stop(GameObject target, string type, bool includechildren) 11. StopByName根据名字停止 StopByName(string name) 12. 外力击打效果(PunchPosition,PunchRotation,PunchScale) 用于模拟物体受外力后,改变位置,旋转,大小的效果。 PunchPosition(GameObject target, Vector3 amount, float time) PunchPosition(GameObject target, Hashtable args) PunchRotation(GameObject target, Vector3 amount, float time) PunchRotation(GameObject target, Hashtable args) PunchScale(GameObject target, Vector3 amount, float time) PunchScale(GameObject target, Hashtable args) 这几个函数没有引入新的哈希表参数,就不详细讲解了 13. PutOnPath 把物体放到某路径的百分之几的位置 PutOnPath(GameObject target, Vector3[] path, float percent) PutOnPath(GameObject target, Transform[] path, float percent) PutOnPath(Transform target, Vector3[] path, float percent) PutOnPath(Transform target, Transform[] path, float percent) 14. PointOnPath 返回一个在路径上百分之几的位置的vector3 position PointOnPath(Transform[] path, float percent) PointOnPath(Vector3[] path, float percent) 15. RectUpdade RectUpdate(Rect currentValue, Rect targetValue, float speed) : Rect 具有返回值 这东西,暂时没搞懂怎么用,反正效果就是一个矩形,在给出的值之间不停的变换位置和大小 16. 旋转(Rotate**) 根据移动(Move**)的函数推理一下就懂了,相信你的能力 RotateAdd(GameObject target, Vector3 amount, float time) RotateAdd(GameObject target, Hashtable args) RotateBy(GameObject target, Vector3 amount, float time) RotateBy(GameObject target, Hashtable args) RotateFrom(GameObject target, Vector3 rotation, float time) RotateFrom(GameObject target, Hashtable args) RotateTo(GameObject target, Vector3 rotation, float time) RotateTo(GameObject target, Hashtable args) RotateUpdate(GameObject target, Hashtable args) RotateUpdate(GameObject target, Vector3 rotation, float time) 17. 规模(Scale**) 根据移动(Move**)的函数推理一下就懂了,相信你的能力 ScaleAdd(GameObject target, Vector3 amount, float time) ScaleAdd(GameObject target, Hashtable args) ScaleBy(GameObject target, Vector3 amount, float time) ScaleBy(GameObject target, Hashtable args) ScaleFrom(GameObject target, Vector3 scale, float time) ScaleFrom(GameObject target, Hashtable args) ScaleTo(GameObject target, Vector3 scale, float time) ScaleTo(GameObject target, Hashtable args) ScaleUpdate(GameObject target, Vector3 scale, float time) ScaleUpdate(GameObject target, Hashtable args) 18. 晃动(Shake**) 根据你给的参数进行位置旋转大小的晃动,比较特别的是,这个晃动会逐步减小归于平静。看了前面那些函数的参数作用,相信这个也不是问题了: ShakePosition(GameObject target, Vector3 amount, float time) ShakePosition(GameObject target, Hashtable args) ShakeRotation(GameObject target, Vector3 amount, float time) ShakeRotation(GameObject target, Hashtable args) ShakeScale(GameObject target, Vector3 amount, float time) ShakeScale(GameObject target, Hashtable args)

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧