描述无定向多图(针对速度和内存进行了优化)的最佳数据结构是什么?
边缘列表是不合适的,因为获取顶点的邻居经常在我的代码中发生.
邻接列表并不好,因为我必须保留有关被访问边的信息,并且当访问1到3的边时(比如我遍历1的邻居并找到导致3并具有权重的边w
),我必须在3的邻居列表中找到相同的边缘以将其标记为已访问,这很慢.
我已经考虑过邻接矩阵当每个小区将是set<Edge>
其中Edge
是表示关于如果顶点被访问信息的结构,重量边缘等.然而,具有当graph[0][1][i]
为已访问我无法设置相同边缘中graph[1][0]
的边缘没有线性搜索.
在表示多图时,有什么好的方法和技巧吗?我不想要第三个图书馆解决方案boost::AdjacencyList
; 我必须自己写.
编辑:对不起有误.这是大学的练习,我只能使用标准库来完成它.该图有约束:0 <n≤300 - 顶点数0 <m≤20000 - 边数1≤w≤500
我的内存限制为32 MB,时间限制为0.5秒(我必须遍历DFS).
所以几天前我学到了std :: addressof.在http://en.cppreference.com/w/cpp/memory/addressof上给出了一个可能的实现:
template< class T >
T* addressof(T& arg)
{
return reinterpret_cast<T*>(
&const_cast<char&>(
reinterpret_cast<const volatile char&>(arg)));
}
Run Code Online (Sandbox Code Playgroud)
据我所知,这可以简单地实现,如:
template<typename T>
T* addressof( T& var )
{
return &var;
}
Run Code Online (Sandbox Code Playgroud)
为什么cppreference的人选择用3个演员来实现它?是否有任何我缺少的细节使他们的实施更好.当你所做的一切都被施展时,使用volatile的意义何在?
我正在寻找一个小而简单的环境来运行小型C++示例.我讨厌打开visual studio并为一个包含50行代码的单个源文件创建一个项目.唯一的要求是获得stl支持(像桌面上的http://www.compileonline.com/compile_cpp_online.php这样的smth 会很棒).
谢谢.
我正在寻找一种在C++中装饰函数或lambdas的方法.目标是在函数调用之前和之后执行某些操作.正如我所见,最接近使用的是std :: function,但它需要具有其参数的类型.
class FunctionDecorator
{
public:
FunctionDecorator( std::function func )
: m_func( func )
void operator()()
{
// do some stuff prior to function call
m_func();
// do stuff after function call
}
private:
std::function m_func;
};
Run Code Online (Sandbox Code Playgroud)
如果模板类型可以在std :: function中使用它会很好,当我将指针传递给函数或std :: bind的结果时,它可以以某种方式推导出它.在C++中这样的事情是否可行.
我正在尝试使用Ramanujan的公式之一在Python上以任意精度计算pi:http://en.wikipedia.org/wiki/Approximations_of_%CF%80#20th_century.它基本上需要大量因子和高精度浮点数除法.
到目前为止,这是我的代码:http: //pastie.org/private/pa6ijmoowiwiw4xwiqmq
我在pi的第15位附近得到了错误(3.1415926535897930,它应该是3.1415926535897932).你能给出一些建议吗?为什么会这样?我正在使用十进制类型,文档说它允许任意精度浮点数和整数.
PS:这是一个家庭作业,所以我不能使用另一个公式.PSS:我正在使用python 2.7
谢谢:)
我在堆中有一个对象并引用它.在某些情况下,对象会被删除,但指向其位置的引用不知道这一点.如何检查堆中是否有真实数据?
例如:
from PySide import *
a = QProgressBar()
b = QProgressBar()
self.setIndexWidget(index,a)
self.setIndexWidget(index,b)
Run Code Online (Sandbox Code Playgroud)
然后该a
对象被删除但print(a)
返回一个有效的地址.但是,如果您尝试a.value()
- 发生运行时错误(C++对象已被删除).
a is None
回报False
.
我有一个QScrollArea,里面有一些按钮,如图所示.
布局的想法是:1.当按钮太宽时,应使用左右按钮滚动按钮
2.滚动区域中的按钮数量可以动态更改3.应尽可能使用任何可用空间来扩展滚动区域.如果不存在这样的空间,则应使用导航按钮进行滚动.
随着我当前的实现,当我增加按钮我有这个:
但是右边有自由空间,所以看起来应该是这样的:
例如,如果我再次增加到10,那么应该出现滚动条(因为小部件会占用布局).
我想知道除了手动调整窗口小部件之外是否还有其他方法(因为ui可以翻译,按钮可以改变大小提示,真正的设计也更复杂:(
这是我对ScrollAreaTest小部件的实现:
#include "MainWidget.h"
#include <QLineEdit>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QScrollArea>
#include <QPushButton>
#include <QDebug>
#include "ButtonWidget.h"
#include "CheckableButtonGroup.h"
MainWidget::MainWidget(QWidget *parent)
: QWidget(parent),
m_scrollArea( 0 ),
m_lineEdit( 0 ),
m_buttons( 0 )
{
QVBoxLayout* mainLayout = new QVBoxLayout( this );
QWidget* firstRow = new QWidget;
QHBoxLayout* firstRowLayout = new QHBoxLayout( firstRow );
QPushButton* left = new QPushButton;
QPushButton* right = new QPushButton;
m_buttons = new CheckableButtonGroup( Qt::Horizontal );
m_buttons->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred );
m_buttons->setButtonsCount( …
Run Code Online (Sandbox Code Playgroud) 我从客户那里获得了一个 iOS 项目。主要任务是探索和查看用户界面,以便使用 Xamarin 从头开始制作多平台应用程序。
我注意到该项目使用名为fabric 的第三方框架。据我所知,它是从崩溃分析中使用的。我不需要那个并且我没有注册所以我想从项目中删除所有依赖项。
到目前为止我做了:
define ENABLE_FABRIC
(从 AptDelegate 中删除了一些代码,用普通 NSLog 等替换了日志消息)所以我在构建我的应用程序时仍然有错误:
/bin/sh: /Users/macmini/Library/Developer/Xcode/DerivedData/../Build/Intermediates/../Script-FDC6FCE81A4488D000F2613D.sh: (null): bad interpreter: No such file or directory
有谁知道摆脱这种情况的快速方法?
我正在尝试使用Ramanujan的公式之一在Python上以任意精度计算pi:http://en.wikipedia.org/wiki/Approximations_of_%CF%80#20th_century.它基本上需要大量因子和高精度浮点数除法.
我使用多个线程来划分无限级数计算,方法是给每个线程赋予所有具有一定模数的成员除以线程数.因此,如果你有3个线程,总和应该像这样划分线程1 ---> 1,4,7 ...成员线程2 ----> 2,5,8 ...线程3 ---- > 3,6,9 ......
到目前为止,这是我的代码:
from decimal import *
from math import sqrt, ceil
from time import clock
from threading import *
import argparse
memoizedFactorials = []
memoizedFactorials.append( 1 )
memoizedFactorials.append( 1 )
class Accumulator:
def __init__( self ):
self._sum = Decimal( 0 )
def accumulate( self, decimal ):
self._sum += decimal
def sum( self ):
return self._sum
def factorial( k ):
if k < 2: return 1 …
Run Code Online (Sandbox Code Playgroud)