小编The*_*tMe的帖子

找到AVL树中两个数字之间的最小间隙

我有一个数据结构作业,除了常规的AVL树函数,我还要添加一个函数,它返回AVL树中任意两个数字之间的最小间隙(AVL中的节点实际上代表数字.)

假设我们在AVL树中有数字(作为节点)1 5 12 20 23 21,该函数应该返回任意两个数字之间的最小间隙.在这种情况下它应该返回"1",即| 20-21 | 或| 21-20 |.

它应该在O(1)中完成.

试图思考很多,我知道有一个伎俩但是找不到它,我已经花了好几个小时.

还有另一项任务是找到最大间隙,这很容易,它是最小和最大数之间的差异.

tree search avl-tree data-structures

9
推荐指数
1
解决办法
3969
查看次数

opencv namedWindow leak(c ++和opencv)

运行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)

c++ opencv

6
推荐指数
1
解决办法
2315
查看次数

在指针向量中释放内存的正确方法?(C++)

我有一个家庭作业问题,我有一个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++

5
推荐指数
2
解决办法
317
查看次数

C++,向量,指针和对象混淆

我正在开展一个项目,作为我的大学系统编程课程的一项功课.我对指针,矢量,堆栈和堆的问题感到很困惑.

使用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)

这给了我一个错误,它不是一个指针.但是,我没有向课程对象添加指向课程对象的指针吗?

请有人解释一下,我必须正确处理内存,似乎我没有做对.

c++

4
推荐指数
1
解决办法
160
查看次数

cvtColor断言失败(OpenCV with C++)

我有一个

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)

c++ opencv

4
推荐指数
1
解决办法
2万
查看次数

不能分配抽象类型的对象 - 但是类不是抽象的!(C++)

我正在做系统编程的功课.我必须实施一所大学.我有一门课程,有儿童班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)

c++

3
推荐指数
1
解决办法
8122
查看次数

向量的向量,堆与堆栈 (C++)

我想初始化一个包含指向课程的指针的向量向量。我声明了这一点:

std::vector<std::vector<Course*> > *CSPlan = 
        new std::vector<std::vector<Course*> >(smsNum);
Run Code Online (Sandbox Code Playgroud)

我想要做的是拥有一个向量向量,每个内部向量都是一个包含指向 Courses 的指针的向量,并且我希望 MAIN 向量的大小为int smsNum。此外,我希望它在堆上。

我的问题是:

  1. 主向量和内部向量都分配在堆上吗?还是只有 MAIN 向量位于堆上,而其索引是指向堆栈上其他较小向量的指针?

  2. 我声明它的大小int smsNum,因此主向量的大小为 10,但是较小的向量呢?它们也是这样的大小还是仍然充满活力?

我的最终目标是拥有一个向量的向量,主向量和堆上的子向量,并且只有主向量的大小为 smsNum,而其余向量都是动态的。

c++ vector

3
推荐指数
1
解决办法
1111
查看次数

Java Observer Update功能

我有一个实现观察者的类,当然它需要有更新功能:

public void update(Observable obs, Object obj);
Run Code Online (Sandbox Code Playgroud)

有人可以解释这两个参数代表什么?Observable当然是我的可观察对象,但是,如何通过这个Observable obs对象访问我的可观察字段?什么是Object obj?

java

3
推荐指数
2
解决办法
9355
查看次数

删除指针的后果

Object *p = new Object();
delete p;
Run Code Online (Sandbox Code Playgroud)

当我删除p时,删除堆上的对象分配.但是p本身究竟发生了什么?它是从堆栈中删除的吗?或者它仍然在堆栈中仍然包含以前保存对象的内存的地址?

c++ memory-management

3
推荐指数
1
解决办法
223
查看次数

默认构造函数参数

#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)

真的发生了什么?这是我第一次在构造函数中看到硬编码参数!

c++ class

2
推荐指数
1
解决办法
275
查看次数