我有一个数据结构作业,除了常规的AVL树函数,我还要添加一个函数,它返回AVL树中任意两个数字之间的最小间隙(AVL中的节点实际上代表数字.)
假设我们在AVL树中有数字(作为节点)1 5 12 20 23 21,该函数应该返回任意两个数字之间的最小间隙.在这种情况下它应该返回"1",即| 20-21 | 或| 21-20 |.
它应该在O(1)中完成.
试图思考很多,我知道有一个伎俩但是找不到它,我已经花了好几个小时.
还有另一项任务是找到最大间隙,这很容易,它是最小和最大数之间的差异.
运行valgrind,我在opencv中得到大量的内存泄漏,尤其是使用namedWindow的函数.
主要是,我有一个图像CSImg和PGImg:
std::string cs = "Computer Science Students";
std::string pg = "Politics and Government Students";
CSImg.displayImage(cs);
cv::destroyWindow(cs);
PGImg.displayImage(pg);
cv::destroyWindow(pg);
Run Code Online (Sandbox Code Playgroud)
显示图像功能是:
void ImageHandler::displayImage(std::string& windowname){
namedWindow(windowname);
imshow(windowname, m_image);
waitKey(7000);
}
Run Code Online (Sandbox Code Playgroud)
当我执行displayImage时,Valgrind给了我巨大的内存泄漏.例如:
==6561== 2,359,544 bytes in 1 blocks are possibly lost in loss record 3,421 of 3,421
==6561== at 0x4C2B3F8: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==6561== by 0x4F6C94C: cv::fastMalloc(unsigned long) (in /usr/lib/libopencv_core.so.2.3.1)
==6561== by 0x4F53650: cvCreateData (in /usr/lib/libopencv_core.so.2.3.1)
==6561== by 0x4F540F0: cvCreateMat (in /usr/lib/libopencv_core.so.2.3.1)
==6561== by 0x56435AF: cvImageWidgetSetImage(_CvImageWidget*, void const*) (in /usr/lib/libopencv_highgui.so.2.3.1)
==6561== by 0x5644C14: …Run Code Online (Sandbox Code Playgroud) 我有一个家庭作业问题,我有一个class Student,和一个指向Student对象的指针向量,这是Student类中的成员字段:
vector<Student*> vectorName;
Run Code Online (Sandbox Code Playgroud)
为了做正确的(?)内存管理,我在Student类中声明了析构函数
Student::~Student() {
for(int i=0; i<vectorName.size(); i++){
delete vectorName.at(i);
}
}
Run Code Online (Sandbox Code Playgroud)
这是否真正从堆中正确释放内存,还是有更好的方法?
我正在开展一个项目,作为我的大学系统编程课程的一项功课.我对指针,矢量,堆栈和堆的问题感到很困惑.
使用C++.我必须得到一个对象的矢量作为课程,这些课程对象有几个不同的领域.我做的是这样的:
vector<CoursesObject> coursevector;
Run Code Online (Sandbox Code Playgroud)
然后我创建了我的Courses Object类,其中包含课程中剩余的空间和课程字段的名称.现在我想添加一个新课程,我这样做:
CoursesObject *theCourse = new CoursesObject(name, space);
Run Code Online (Sandbox Code Playgroud)
现在我想将它添加到处理程序向量中:
coursevector.push_back(*theCourse);
Run Code Online (Sandbox Code Playgroud)
据我所知,我在堆栈上创建了一个Courses对象的向量,并创建了一个指向堆上新路线的新指针,并将指向theCourse的指针添加到堆栈中的指向theTeourse.我说的是对的吗?
当我尝试删除这些课程对象时,我会这样做:
for(int i=0; i<coursevector.size(); i++)
delete coursevector.at(i);
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误,它不是一个指针.但是,我没有向课程对象添加指向课程对象的指针吗?
请有人解释一下,我必须正确处理内存,似乎我没有做对.
我有一个
cv::Mat image;
Run Code Online (Sandbox Code Playgroud)
对象,我从一个文件加载图像,它正确读取它和所有.
现在我编写了一个函数将其转换为灰色.
cv::cvtColor(image, image, CV_RGB2GRAY);
Run Code Online (Sandbox Code Playgroud)
这个错误出现了:
OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cvtColor, file /build/buildd/opencv-2.3.1/modules/imgproc/src/color.cpp, line 2834
terminate called after throwing an instance of 'cv::Exception'
what(): /build/buildd/opencv-2.3.1/modules/imgproc/src/color.cpp:2834: error: (-215) scn == 3 || scn == 4 in function cvtColor
Run Code Online (Sandbox Code Playgroud)
可能是什么问题呢?
这是我读取图像的方式(通过具有成员cv :: Mat m_image的imagehandler类)
imagehandler::imagehandler(const std::string& fileName)
: m_image(imread(fileName, CV_LOAD_IMAGE_COLOR))
{
if(!m_image.data)
{
cout << "Failed loading " << fileName << endl;
}
}
Run Code Online (Sandbox Code Playgroud) 我正在做系统编程的功课.我必须实施一所大学.我有一门课程,有儿童班ComputerScience课程班,PG课程班和选修课程班.
class Course
{
public:
virtual void teach();
virtual void reg(Student &s)=0;
std::string getName();
std::string getDepartment();
int getSemester();
int getMinGrade();
void addStudent(Student *s);
void removeStudent(Student *s);
protected:
std::string _department;
std::string _name;
int _semester;
int _minGrade;
std::vector<Student*> studentsList;
};
class CSCourse : public Course
{
public:
CSCourse();
CSCourse(std::string department, std::string name, int semester, int mingrade);
~CSCourse();
std::string getName();
std::string getDepartment();
int getSemester();
int getMinGrade();
void addStudent(Student *s);
void removeStudent(Student *s);
};
Run Code Online (Sandbox Code Playgroud)
(PG课程和选修课程子课程是相同的)在课程类中的功能(不是无效的,如getSemester等等).我只是做dynamic_cast来确定它的课程类型.
我有这个问题:
courseVector是:
std::vector<Course*> coursesVector
Run Code Online (Sandbox Code Playgroud)
和dp变量是一个包含CS,PG或Elective的字符串.总的来说,我这样做:
if (dp == "CS") …Run Code Online (Sandbox Code Playgroud) 我想初始化一个包含指向课程的指针的向量向量。我声明了这一点:
std::vector<std::vector<Course*> > *CSPlan =
new std::vector<std::vector<Course*> >(smsNum);
Run Code Online (Sandbox Code Playgroud)
我想要做的是拥有一个向量向量,每个内部向量都是一个包含指向 Courses 的指针的向量,并且我希望 MAIN 向量的大小为int smsNum。此外,我希望它在堆上。
我的问题是:
主向量和内部向量都分配在堆上吗?还是只有 MAIN 向量位于堆上,而其索引是指向堆栈上其他较小向量的指针?
我声明它的大小int smsNum,因此主向量的大小为 10,但是较小的向量呢?它们也是这样的大小还是仍然充满活力?
我的最终目标是拥有一个向量的向量,主向量和堆上的子向量,并且只有主向量的大小为 smsNum,而其余向量都是动态的。
我有一个实现观察者的类,当然它需要有更新功能:
public void update(Observable obs, Object obj);
Run Code Online (Sandbox Code Playgroud)
有人可以解释这两个参数代表什么?Observable当然是我的可观察对象,但是,如何通过这个Observable obs对象访问我的可观察字段?什么是Object obj?
Object *p = new Object();
delete p;
Run Code Online (Sandbox Code Playgroud)
当我删除p时,删除堆上的对象分配.但是p本身究竟发生了什么?它是从堆栈中删除的吗?或者它仍然在堆栈中仍然包含以前保存对象的内存的地址?
#include <vector>
class A {
private:
std::vector<int> v_;
public:
A(int size = 100, int init_val = 100){
for(int i=0; i<size; i++)
v_.push_back(init_val);
}
};
Run Code Online (Sandbox Code Playgroud)
主要是,如果我这样做:
A a(1000, 100);
Run Code Online (Sandbox Code Playgroud)
真的发生了什么?这是我第一次在构造函数中看到硬编码参数!