小编pen*_*ope的帖子

std :: set和std :: priority_queue之间的区别

由于两者std::priority_queuestd::set(和std::multiset)都是存储元素的数据容器,并允许您以有序的方式访问它们,并且具有相同的插入复杂性O(log n),因此使用一个优于另一个(或者,什么样的情况需要一个)或者其他?)?

虽然我知道底层结构是不同的,但我对它们的实现差异并不那么感兴趣,因为我在比较它们的性能适用于各种用途.

注意:我知道集合中没有重复.这就是我之所以提到的原因,std::multiset因为它具有与之完全相同的行为,std::set但可以在允许存储的数据作为相等元素进行比较的情况下使用.所以,请不要评论单/多键问题.

c++ sorting algorithm priority-queue

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

OpenCV序列 - 如何创建点对序列?

我正在尝试创建一个空序列(CvSeq),OpenCV其结构类似于返回的序列,例如,cvHoughLines2(当用于CV_HOUGH_PROBABILISTIC)时 - 一对点对.

我找到了一种方法来制作一系列(未连接的)点(我希望这对点序列是正确的):

CvMemStorage *memStorage = cvCreateMemStorage(0);
CvSeq* seq = cvCreateSeq(
             CV_SEQ_FLAG_SIMPLE | CV_SEQ_KIND_SET | CV_SEQ_ELTYPE_POINT,
             sizeof(CvSeq), sizeof(CvPoint), memStorage); 
Run Code Online (Sandbox Code Playgroud)

但是看着可用于创建的标志CvSeq我找不到任何可用于构造其元素为点对的序列.我想访问我创建的序列的元素,就像我访问从Hough Transform获得的行一样:

for (int i=0; i < mylines->total; ++i){
    CvPoint *line = (CvPoint *)cvGetSeqElem(mylines, i);

    ...

    ... line[0].x ...
    ... line[1].y ... 

    ...
}
Run Code Online (Sandbox Code Playgroud)

另外,我如何以这样的顺序插入元素?:/

这个问题的原因是我已经在一个函数CvSeq返回的行上运行了一个非常复杂的cvHoughLines2()函数,我想在图片中创建的一些任意行上使用它(测试目的等等) .我已经到处寻找类似问题的答案,但找不到任何东西...... :(

非常感谢你的帮助!

编辑:找到了解决方案.

看起来唯一需要做的就是完全省略标志,表明你不会使用任何预定义的类型(例如点),只需给出正确的序列组件大小:

CvMemStorage *memStorage = cvCreateMemStorage(0);
CvSeq* seq = cvCreateSeq(0, sizeof(CvSeq), sizeof(CvPoint)*2, memStorage);
Run Code Online (Sandbox Code Playgroud)

我可以通过将指针传递给push函数的2点数组来添加到存储中:

CvPoint …
Run Code Online (Sandbox Code Playgroud)

c++ opencv

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

使用"this"对所有成员函数和属性进行不良实践?

最近,我在这里贴一张我的代码,并得到了评论(无关原来的问题),其使用this类的所有成员函数和属性是"不是简单的个人编码风格的问题,这是不好的做法".不幸的是,这个人拒绝详细说明并告诉我自己查一下.

我用谷歌了一堆(但它真的很难找了什么"这个"作为关键字),并期待在这里,但我只找到一些 例子this ,必须使用.

我知道使用this不可避免的情况(参数/变量具有相同的名称,模板继承等),但随着时间的推移我开始使用,this因为我可以更轻松,更快地找到我的代码.我的理由包括:

  • 快速检查函数f是否应该是一个成员函数:如果this代码中没有,它可以从类中取出
  • 快速检查是否f可以是一个const功能:如果this左边没有,很可能是可以制作const(并不总是,但我觉得它在浏览时很有用)
  • 快速检查对象是否以"预定义"方式"更改"自身f,或者它是否为复合成员函数(使用this对象操作的成员方法与没有此操作的对象的"外部"算法)
  • 调试; 即如果成员属性在任何点被赋予错误的值,我必须专注于包含的行this来找到问题,因为其他行不会更改对象

坦率地说,关于这种"不良做法"的评论让我感到不安.但是,一个评论本身并不意味着什么,所以我想问一下,this对于所有成员函数和属性使用一致性是否有任何不妥之处?如果是这样,那么将它置于(可能是笨拙的,不受欢迎的或不普遍的)个人风格并将其置于"不良实践"类别中的主要缺点是什么?

c++ class

25
推荐指数
2
解决办法
1129
查看次数

如何确定OpenCV版本

如何确定我安装的OpenCV版本?

我最感兴趣的是以编程方式(和跨平台)知道一种方法,但我甚至找不到从代码外部确定已安装版本的方法.

我在Fedora上使用C++ 03.

c++ opencv version

23
推荐指数
4
解决办法
3万
查看次数

OpenCV - 关闭图像显示窗口

我正在做一个搜索图像数据库的项目,当我找到一些查询的结果--5个数据库图像时,我想直观地显示结果.我没有将所有图像保存在内存中,所以我先加载图像以显示它.

在伪代码中,我有一些简单的想法:

for image 1..5
    load images
    display image in a window
    wait for any keypress
    close the window
Run Code Online (Sandbox Code Playgroud)

这里是我的代码片段C++使用OpenCV用于此目的:

IplImage *img;

for (int i=0; i < 5; ++i){
    img = cvLoadImage(images[i].name.c_str(),1);
    cvShowImage(("Match" + images[i].name).c_str(), img);
    cvWaitKey(0);
    cvDestroyWindow(("Match" + images[i].name).c_str());
    // sleep(1);
    cvReleaseImage(&img);
}
Run Code Online (Sandbox Code Playgroud)

images这里使用的数组并不存在于我的代码中,但是为了问题,它包含相对于当前程序运行点(如果是其name成员)的图像的文件名.我在项目中存储的图像名称略有不同.

上面的代码几乎可以工作:我可以迭代4/5图像OK,但是当显示最后一个图像并按下一个键时,图像变为灰色,我无法关闭图像窗口而不会崩溃我的应用程序的其余部分.

我的第一个想法是因为编译时优化,cvReleaseImagecvDestroyWindow完成之前释放图像,并以某种方式使其冻结.但是,我已经尝试添加一些等待时间(因此sleep(1)我的代码注释掉了)并没有帮助.

我从我的控制台应用程序调用此显示功能,当图像冻结时,控件返回到我的应用程序,我可以继续使用它(但图像窗口仍然在后台冻结).

你能给我一些关于如何解决这个问题的建议吗?

编辑

自从提出问题以来,我已经定期与一些处理计算机视觉和OpenCV的人交谈,但仍然没有想法.

我也发现了类似的stackoverflow问题,但仍然没有接受的答案.谷歌只是提出类似的问题,但没有答案.

任何关于尝试什么的想法(即使它们不是完整的解决方案)都非常感谢.

c c++ opencv

20
推荐指数
2
解决办法
6万
查看次数

std :: vector of std :: vectors contiguity

我知道std::vector<T>内部存储它的数据(除非它是std::vector<bool>)旧C++03标准和新标准C++11.

很好的stackoverflow问题处理这个并引用标准:答案,答案.

嵌套向量中的数据怎么样std::vector <std::vector <T> >?怎么存储?

如果每个内部向量都需要连续存储它的数据,那么它怎么可能是真的&v[n] == &v[0] + n for all 0 <= n < v.size().

要说这个略有不同,是否可以"简单地"和顺序地(通过指针或类似)访问存储在这种嵌套结构中的所有元素,就像对一维矢量所做的那样?

c++ vector stdvector

18
推荐指数
3
解决办法
7920
查看次数

如何使用特定的过滤器从其他向量生成std :: vector?

我有一个std::vector充满了物体.我想过滤并复制一些谓词返回的所有元素true到一个新的元素std::vector.

我看过find并且search函数但是它们只返回迭代器.

我正在使用ObjC++,所以我可以使用块函数和仿函数,如果它有帮助的话.但是不能使用C++ 11函数.

c++ stl vector objective-c++

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

线性规划 - 双重单纯变量意义?

我刚学会了解决线性程序的单纯形法,我试图理解它的双重问题代表什么.

我理解解决双重问题的机制 - 我不需要帮助.我无法得到的(甚至在维基百科上阅读之后)是双变量中y变量的实际含义.

我想在原始问题中给出一个可变含义的例子,以及我从双重中得出的结论,并且会问任何人在解释双重意义中的意义:

原始:

max z = 3*x1 +  5*x2

subject to:
          x1          <=  4
                2*x2  <= 12
        3*x1 +  2*x2  <= 18

        x1, x2 >= 0
Run Code Online (Sandbox Code Playgroud)

在原始问题中,x1x2是要生产的产品AB的量.35分别是它们的单位售价.产品由3台M1-M3机器生产.要生产第一种产品,需要在M1上工作一小时,在M3上工作3小时.要生产第二个,M2M3需要两个小时的工作.机器M1,M2,M3可分别最多工作4小时,12小时和18小时.最后,我不能产生负数量的任何产品.

现在,我设置了双重问题:

min z = 4*y1 + 12*y2 + 18*y3

subject to:
          y1         + …
Run Code Online (Sandbox Code Playgroud)

mathematical-optimization linear-programming simplex

11
推荐指数
1
解决办法
5813
查看次数

朋友类概念不需要如何申报?

我刚刚学会了friend classC++中的概念(我已经搜索了一下,但这个答案让我笑到我记得最重要的部分),而我正试图把它融入项目中我是现在正在努力.这个简明的问题最终被挑出来了,但总的来说,我对我工作代码中完全缺乏前向声明感到困惑.

我的所有类都通过(子)文件夹分隔,每个文件夹分别放在一个单独的.h.cpp文件中,但这应该足以让人产生依赖关系:

// FE.h - no implementations - no .cpp file
class FE
{
    private:
       virtual void somePrivateFunc() = 0;
    // 90% virtual class, interface for further implementations
    friend class TLS;
};

// DummyFE.h
#include "FE.h"
class DummyFE :: public FE {
    /* singleton dummy */
    private:
        // constructor
    public:
        static DummyFE& instance();
};
// DummyFE.cpp
#include "DummyFE.h"
// all Dummy FE implementation

// ImplFE.h
#include "FE.h"
class ImplFE …
Run Code Online (Sandbox Code Playgroud)

c++ class forward-declaration friend-class

11
推荐指数
2
解决办法
5791
查看次数

如何为另一个类型类中的所有类型编写实例?

我必须定义一个类型类,它Truthy包含一个true将类型类的实例转换为Bool值的方法.

我的类型类声明:

class Truthy a where
    true :: a -> Bool
Run Code Online (Sandbox Code Playgroud)

接下来,我必须为各种类型定义此类的实例,包括列表和数字类型.我已经为list和Ints 做过了,但有没有办法一次为所有数字类型做到这一点?

基于我的Int声明:

instance Truthy Int where
    true = (/=) 0
Run Code Online (Sandbox Code Playgroud)

我已经尝试添加类型类约束,但它不起作用:

instance (Num a) => (Truthy a) where
    true = (/=) 0::a
Run Code Online (Sandbox Code Playgroud)

如果有一种方法与我的想法相似,或者我应该分别为每种数字类型定义它?

haskell

10
推荐指数
1
解决办法
1112
查看次数