草庐IT

Pointers

全部标签

c++ - 我总是可以用常规指针代替输入迭代器吗?

我能否始终以下面代码中示例的方式替换InputIterators的指针?inta[]={5,6,7,8,9,10};std::listl(a,a+4);//5,6,7,8list的构造函数声明是(省略分配器部分)list(InputIteratorfirst,InputIteratorlast);但是从C++引用来看,似乎任何支持++(递增)和*(取消引用)等操作的东西都可以用作InputIterators?谢谢。 最佳答案 C++标准部分§24.2.1[iterator.requirements.general]:Iterator

c++ - 如何将 cv::Mat 转换为 ros 中的 sensor_msgs?

我正在尝试将cv::Mat转换为sensor_msgs,以便我可以在ROS中发布它。我的代码是这样的:while(ros::ok()){capture>>frame;cv::imshow("Preview",frame);cv::waitKey(1);//sensor_msgs::Imageimg_;//fillImage(img_,"rgb8",frame.rows,frame.cols,3*frame.cols,frame);//img_header.stamp=ros::Time::now();//cv_bridge::CvImagePtrcv_ptr;//cv_ptr->ima

c++ - 资源管理- vector 和指针

我需要存储ThirdPartyElm类型的元素序列,我使用的是std::vector(或std::array如果我需要一个固定大小的序列)。我想知道我应该如何初始化序列。第一个版本创建一个新元素,并且(如果我是对的)在将元素插入到序列中时创建该元素的拷贝:for(inti=0;i第二个版本存储一系列指针(或更好的c++11智能指针):for(inti=0;ielm(newThirdPartyElm());//initelm..my_vector.push_back(std::move(elm));//my_array[i]=std::move(elm);}哪个是最轻量级的版本?请突出显

c++ - 指针,将 char ** 转换为 char *

我正在研究指针,但我被下面的示例程序难住了。它应该是将char**转换为char*,但我不明白程序背后的逻辑。程序在做什么?#includeusingnamespacestd;intmain(){char*notes[]={"cpp","python","java","mariadb"};void*base=notes;//notesandbase,holdstheaddressofnote'sfirstelementvoid*elemAddr=(char*)base+3*sizeof(char*);//ididn'tunderstandthisline???cout

c++ - 如何读取数据构造一个const数组?

const变量声明后不能修改。我知道我可以通过以下方式定义constint:constinta[5]={0,1,2,3,4};但问题是我不知道数据到底是什么。并且只读取一次数据就足够了,我可以通过一些指针操作将它们存储在一个const数组中吗?如果您能提供一些提示,我将不胜感激:) 最佳答案 使用函数:std::vectorreadArray(){std::vectorarray;//populatearrayreturnarray;}然后:conststd::vectorconstArray=readArray();如果您事先知道

c++ - 作业 : Making an array using pointers

我正在解决作业问题。我和其他一些学生非常确定我们的老师说错了,但也许不是。我已经检查了这里的一些问题,但无法真正找到使用指针创建本质上是数组的方法。说明如下。重写以下程序以使用指针而不是数组:代码是这样的intmain(){intsalary[20];inti;for(i=0;i>salary[i];}for(i=0;i我的解决方案是这样的:intmain(){int*salary_pointer=newint;for(inti=0;i>*(salary_pointer+i);}for(inti=0;i它一直在salarynumber13左右标记段错误我的主要目的(因为我几乎可以肯定我

c++重载具有不同参数的3个函数(int,* int,& int)

所以我有这个作业要做“使用函数重载定义3个具有相同名称但具有不同prams类型(int、int*、int&)的函数,它们将返回值的平方根。”好吧,我做到了,但我不知道它给了我这个错误:“对重载函数的模糊调用”。我尝试修复它但没有成功......这是我的代码,它非常简单:#define_CRT_SECURE_NO_WARNINGS#include#includeusingnamespacestd;doublerad(int);doublerad(int*);doublerad(int&);intmain(){inta,*pt=&a;cin>>a;cout 最佳

c++ - C++ 中是否有一种机制可以在没有动态内存分配的情况下从基类指针复制派生类的完整拷贝?

考虑以下示例,其中对象切片发生在基指针的取消引用期间。#includeclassBase{public:virtualvoidhello(){printf("helloworldfrombase\n");}};classDerived:publicBase{public:virtualvoidhello(){printf("helloworldfromderived\n");}};intmain(){Base*ptrToDerived=newDerived;autod=*ptrToDerived;d.hello();}我希望变量d保存类型为Derived的对象,而不是类型为Base的对

从 const int* 到 int* 的 C++ 转换处理意外结果

这个问题在这里已经有了答案:whichpropertyofaconstantmakesitnotchangable?(3个答案)关闭6年前。在c++中,我们知道我们不能将constint*转换成int*。但是我有一个代码片段,我可以在其中将constint*转换为int*。我是C++的初学者,我用谷歌搜索了这个,但我只是得到提到constint*can'tbeconvertedintoint*toavoidconstviolation的链接。我无法弄清楚为什么它编译没有错误#includeusingnamespacestd;intmain(void){constinta1=40;con

c++ - `(c = *str) != 0` 是什么意思?

intequiv(char,char);intnmatches(char*str,charcomp){charc;intn=0;while((c=*str)!=0){if(equiv(c,comp)!=0)n++;str++;}return(n);}“(c=*str)!=0”到底是什么意思?有人可以向我解释一下或帮助我提供正确的术语以自己搜索解释吗? 最佳答案 这个表达式有两部分:c=*str-这是通过取消引用指针对c的简单赋值,val!=0-这是与零的比较。这是可行的,因为赋值是一个表达式,即它有一个值。赋值的值与被赋值的值相同,