小编mas*_*oud的帖子

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

图分层布局算法

有许多工具和SDK可以布局图形.ogdf,GraphViz,mxGraph,yEd ......

在此输入图像描述

有用的布局之一是"分层布局".但是没有纯算法或伪代码来描述它.甚至,这种布局没有明确的定义.有人知道算法吗?

c# c++ java layout graph

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

使QGraphicsProxyWidget可移动和可选

我想把a QWidget放入一个QGraphicsView并通过使用使小部件可选择和移动QGraphicsProxyWidget.(这完全适用QGraphicsRectItem,QGraphicItem等等)

这是我目前使用的代码:

// Create new QGraphicsScene and assign to graphicsView
scene = new QGraphicsScene(this);
ui->graphicsView->setScene(scene);

// Create widget and add to scene
MyWidget *widget = new MyWidget;
QGraphicsProxyWidget *proxy = scene->addWidget(widget);

// Make selectable
proxy->setFlag(QGraphicsItem::ItemIsSelectable, true);
// Make movable
proxy->setFlag(QGraphicsItem::ItemIsMovable, true);
Run Code Online (Sandbox Code Playgroud)

小部件显示正确,但它既不可移动也不可选择!

任何帮助将不胜感激 ;)

c++ qt

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

停止goroutine中的所有递归函数

盯着运行递归函数的goroutine,我想发送一个信号来阻止那些递归函数.这是功能(功能并不重要):

func RecursiveFunc(x int, depth int, quit chan bool) int {

    if depth == 0 {
        return 1
    }

    if quit != nil {
        select {
        case <-quit:
            return 0
        default:
        }
    }

    total := 0

    for i := 0; i < x; i++ {

        y := RecursiveFunc(x, depth - 1, quit)

        if y > 0 {
            total += y
        }

    }

    return total
}
Run Code Online (Sandbox Code Playgroud)

此功能可能需要很长时间才能完成,我想在发送退出信号并使用结果(无论是什么)后停止它.要运行它:

import (
    "fmt"
    "time"
    "sync"
)

func main() {

    quit := make(chan bool)
    wg …
Run Code Online (Sandbox Code Playgroud)

go goroutine

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

基准C++与Java,不切实际的结果

我做了一个简单的测试,我知道C++更快但我的测试结果不切实际.

C++代码是:

#include <stdio.h>
#include <windows.h>

unsigned long long s(unsigned long long n)
{
    unsigned long long s = 0;

    for (unsigned long long i = 0; i < n; i++)
        s += i;

    return s;
}

int main()
{
    LARGE_INTEGER freq, start, end;
    QueryPerformanceFrequency(&freq);
    QueryPerformanceCounter(&start);

    printf("%llu\n", s(1000000000));

    QueryPerformanceCounter(&end);
    double d = (double) (end.QuadPart - start.QuadPart) / freq.QuadPart * 1000.0;

    printf("Delta: %f\n", d);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Java代码是:

public class JavaApplication5 {

    public static long s(long n) {
        long s = …
Run Code Online (Sandbox Code Playgroud)

c++ java benchmarking gcc

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

受保护的成员对于派生类是未知的

我找到了Graphs的开源类库.当我将它包含在我的项目中时,它有很多错误,我试图修复它们.但是有一个编译错误,我无法解决它.

基类:

template <typename K, typename W, typename T>
class _base_graph
{
//... 

protected:
    std::map<K, T> nod;
    std::list<edge> edg;
};
Run Code Online (Sandbox Code Playgroud)

派生类:

template <typename K, typename T = void*>
        class graph : public _base_graph<K, void*, T>
{
//...
public:
    void add_edge(const K& k1, const K& k2);
};
Run Code Online (Sandbox Code Playgroud)

方法体:

template <typename K, typename T>
void graph<K, T>::add_edge(const K& k1, const K& k2)
{
    if (nod.find(k1) == nod.end() || nod.find(k2) == nod.end()) // <-- error!!
        throw std::string("add_edge: Node does not exist");

    // ... …
Run Code Online (Sandbox Code Playgroud)

c++

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

为什么QFileInfo :: isExecutable()为".msi"文件返回false?

我目前正在使用C++和Qt开发应用程序,我需要知道输入文件是否可执行.

我正在使用QFileInfo::isExecutable()哪个行为正常的大多数文件,除了具有.msi扩展名的文件,它返回false.

如何确定文件是否可执行?出于交叉兼容的原因,我需要在Qt中执行此操作.

c++ qt

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

var ++或var-- not threadsafe?

在C++中,我觉得我一直都认为像var ++和var--这样的东西是合理的线程安全的 - AKA - 你可以保证你的价值会在某个时间点增加或减少.

正是基于这种信念,我建立了对非线程算法的理解,以实现线程安全操作.然而,今天我感到震惊,因为我有一个没有增加的变量 - 因此我质疑我过去工作的大量有效性.

在一个小程序中,我有一个初始化为0的全局变量.启动了八个P-Threads,每个调用varname ++总共1024次,总计增加到8*1024.但是在所有线程完成执行后,varname的值明显小于8*1024.

我在这里错过了这条船吗?有人可以赐教吗?

c++ increment nonblocking thread-safety

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

使用基类函数指针访问派生类成员函数

我在我的项目中使用函数指针,面临问题,创建了一个测试用例来显示它...下面的代码失败,MSVC2005上面有以下错误(简单来说我想通过基类函数指针访问dervied类函数)

错误C2440:'=':无法从'void(__ thiscall ClassB ::*)(void)'转换为'ClassAFoo'

class ClassA {
 public: 
    virtual void foo() 
    {
       printf("Foo Parent"); 
    }
};

typedef void (ClassA::*ClassAFoo)();

class ClassB : public ClassA {
 public:
    virtual void foo() 
    { 
        printf("Foo Derived"); 
    }
};

int main() {
    ClassAFoo fPtr;
    fPtr = &ClassB::foo;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是

  1. 是不是C++行为,我无法通过基类函数指针或其编译器错误访问派生类函数?
  2. 我一直在玩上面的情况,如果我注释掉ClassB::foo,这段代码编译好了,没有任何进一步的修改,为什么这样,不应该fPtr = &ClassB::foo;再次导致编译时错误?

c++ visual-studio-2005 visual-c++

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

多重继承和指针实现

给出以下代码:

namespace Example1 {

class A {
public:
    A() {}
    virtual ~A() {}
private:
    float data_A;
};

class B {
public:
    B() {}
    virtual ~B() {}
protected:
    float data_B;
};

class Derived : public A, public B {
public:
    Derived() {}
    virtual ~Derived() {}
protected:
    float data_Derived;
};

}

int main (void)
{
using namespace Example1;
B* pb = new Derived;
delete pb;
}
Run Code Online (Sandbox Code Playgroud)

pb现在应该指向对象的B一部分Derived.但派生对象也派生自A,意味着它具有A子对象..并且该A子对象应该是"第一",因为Derived该类首先继承自A. …

c++

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