小编Its*_*sik的帖子

我需要高性能.如果我使用C或C++会有区别吗?

我需要编写一个程序(大学项目)来解决(近似)NP难题.它是线性排序问题的变体.一般来说,我将有非常大的输入(如图形),并将尝试找到最佳解决方案(基于一个"评价"每个解决方案的功能)

如果我用C风格的代码(一个main和函数)编写它,或构建一个Solver类,创建一个实例并从main调用一个'run'方法(类似于Java),会有区别吗

此外,每次迭代都会有很多浮点运算.

谢谢!

c c++ performance np-hard

18
推荐指数
5
解决办法
1705
查看次数

在放大MapView时,奇怪的叠加绘制行为

我已经扩展了Overlay并实现draw()了以便在地图上绘制一些东西.完成缩放mapController.zoomIn()(双击地图时调用),叠加层将正确绘制到地图上.

但是每当我使用内置的变焦控制器放大/缩小时,叠加都没有正确绘制,并且需要平移地图才能刷新叠加层.

android overlay zoom android-mapview

18
推荐指数
1
解决办法
1956
查看次数

在我的android地图叠加层中不断调用draw

我正在尝试在MapView上绘制一条路线.我已经扩展了Overlay并实现了draw()方法.路径显示正常,但在调试时,我在draw()上添加了一个断点,并注意到它被不断调用.

如果有人移动地图或缩放,我只希望重新绘制(绘制路线时绘制考虑了这些变化)是什么导致这种情况?

android overlay android-mapview

12
推荐指数
1
解决办法
5655
查看次数

使用LibTIFF C++编写10,12位TIFF文件

我正在尝试用LibTIFF写入10,12位RGB TIFF文件.

像素数据本地保存在unsigned short缓冲区(16位)

1)如果设置TIFFTAG_BITSPERSAMPLE为10或12,则从缓冲区中读取的位数不足,输出不正确.(我知道它只是读取每个组件10或12位,而不是16,这是问题)

2)我尝试将缓冲区中的位打包,因此它实际上是12-R,12-G,12-B.在这种情况下,我认为文件正确写入,但我找不到的查看器可以正确显示此图像.

3)如果我设置TIFFTAG_BITSPERSAMPLE为16,观众可以显示TIFF图像,但是我有一个问题,我不知道图像最初是10位还是12位(如果我想稍后用LibTIFF读取它).此外,观众期望动态范围是16位而不是10或12,也导致视图不良.

4)最烦人的部分是我在网上找不到10,12或14位TIFF图像,看看标题应该是什么样子.

最后,将10或12位图像数据写入TIFF文件的正确方法是什么?

c++ tiff libtiff

12
推荐指数
1
解决办法
5226
查看次数

有关在何处删除继承层次结构中的资源的最佳实践

请考虑以下代码:

class Base {
protected: 
    int* ptr_;

public:
    virtual ~Base() { /* delete ptr_ ?? */ }    
}

class A : public Base {
public:
    A() { ptr_ = new int; }
    ~A() { /* delete ptr_ ?? */ }
}
Run Code Online (Sandbox Code Playgroud)

我和我的同事发生了轻微的争执.
哪个析构函数应该删除ptr_
我认为它应该在A,因为它是分配的地方.
他认为它应该存在Base,因为那是指针所在的位置.

请告诉我为什么一种方法比另一种方法更好(如果有一种方法,这不仅仅是品味问题)

编辑
很多人质疑设计.在实践中,代码要复杂得多,并且模拟了涉及几个相机的图像处理系统.Base的作用是管理系统的资源(存在一些配置).类A和其他派生类型决定Base了系统的配置并将系统初始化为特定配置.我想现在你可以问一下,如果继承是合成的正确选择.Ais-a Base,只是一种特定的类型,这就是我们选择继承的原因.在这种情况下,ptr_是一个指向摄像机特定驱动程序的指针,它将由派生类型决定,这就是它在那里分配的原因.

c++ oop

8
推荐指数
3
解决办法
342
查看次数

缩放在Android Mapview中工作的事件

我需要在用户缩放后重绘重叠.
做这个的最好方式是什么?
我已经尝试了我能想到的一切(保存getZoomLevel()状态,覆盖onUserInteraction()),没有任何实际工作.
问题是,当用户点击缩放时会调用draw(),因此我的绘制方法得到的信息(关于地图的状态)与mapview完成缩放后的状态不同.
此外,在缩放结束时不会调用draw(),因此只有在平移地图时才会正确绘制叠加层.

android google-maps zooming android-mapview

7
推荐指数
1
解决办法
1072
查看次数

系统之间奇怪的"睡眠"行为

我有一个程序使用SleepWin32 API调用使一个线程等待一段特定的时间.
简而言之,它通过发送预存在内存中的图像来模拟相机.我Sleep用来模拟帧速率 -Sleep(1000 / fps)

这在我的开发系统(Intel i5(第1代),Win7 64)中运行良好,但是当我在另一个系统(Intel i7-2600 - SandyBridge)上运行它时,睡眠时间完全不同且不准确.

例如, Sleep(16)睡觉时32ms
Sleep(3)睡觉16ms

在过去,我认为在Windows中有最小的睡眠时间,15ms但我没有在我的开发系统上得到这个限制.

有任何想法吗?

另外,有没有更好的方法来实现我的模拟器的帧速率?

c++ winapi timing

7
推荐指数
1
解决办法
574
查看次数

算法复杂度问题

在最近的一次面试中,我被要求解决以下问题:

给定一个字符串s(没有空格)和一个字典,返回组成字符串的字典中的单词.

例如,s= peachpie, dic= {peach, pie}, result={peach, pie}.

我会问这个问题的决定变化:

如果s可以在字典中组成单词返回yes,否则返回no.

我的解决方案是回溯(用Java编写)

public static boolean words(String s, Set<String> dictionary)
{
    if ("".equals(s))
        return true;

    for (int i=0; i <= s.length(); i++)
    {
        String pre = prefix(s,i); // returns s[0..i-1]
        String suf = suffix(s,i); // returns s[i..s.len]
        if (dictionary.contains(pre) && words(suf, dictionary))
            return true;
    }
    return false;
}

public static void main(String[] args) {
    Set<String> dic = new HashSet<String>();
    dic.add("peach");
    dic.add("pie"); …
Run Code Online (Sandbox Code Playgroud)

algorithm complexity-theory backtracking

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

如何在距离已知距离设置的两个摄像机给出两个图像的情况下测量到物体的距离

我正在寻找一个开源项目或库(c ++,c),可以给我一个方法来计算图像中某个对象(像素)的距离,假设我有关于摄像机的所有信息 - 视图,焦距,相机之间的距离等.

c++ open-source computer-vision

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

初始化算法的设计模式,每个算法接受不同的参数

我想重新设计一个我拥有的图书馆.
目前我有一套算法,它们不以任何方式相互关联.

我的目标是让所有的具体算法实现,这将包括大约一个接口Init()Run(In,Out)这样我就可以用以下方式执行它们:

void Process()
{
    // IAlgotrithm* algX = new CAlgX(); X:{A,B,C}
    IAlgorithm* algs[] = { algA, algB, algC }; 
    for (int i=0; i < 3; i++) {
        algs[i]->Init(...);
        algs[i]->Run(In,Out);     
    }
 }
Run Code Online (Sandbox Code Playgroud)

问题是,目前每个算法都接受一个不同的结构作为其输入参数.
例如,CAlgA有一个方法Init(CAlgAParameter param),其中CAlgAParameter包含特定于AlgA的字段的结构.每种算法都有自己的结构,由不同类型的完全不同的字段组成.解决这个问题的最佳方法是什么?

我能想到的一个选择是拥有一个包含与所有算法相关的所有参数的地图,并将初始化输入结构的工作委托给算法.也就是说,算法的客户端将不知道具体的输入结构是什么样的 - 基于映射中的所有全局参数来创建其输入结构将是算法工作.我不喜欢这个想法,因为它无法在编译时检查并且容易出错.

什么是最好的方法来解决这个问题?
谢谢

c++ design-patterns

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

关于C++异常处理/投掷的澄清

请考虑以下代码:

try {
   int *i = NULL;
   i[100] = 20;
catch (...) {
   std::cout << "Exception Caught";
}
Run Code Online (Sandbox Code Playgroud)

运行此代码时,它崩溃(显然,访问NULL指针).虽然,在调试模式下,Visual Studio会声明有关写访问违规的Uncaught异常.也可以理解.

我期待在这里捕获一个例外,但没有一个是.
我的结论是,没有例外被抛出.
那么为什么VS警告未捕获的异常呢?

这个问题都是在我想要保护自己免受其他程序员编写代码的时候开始的,并希望用try-catch包含对函数的调用,假设他可能会做一些访问冲突.但是,如果我只能捕捉到被抛出的异常,那我就搞砸了.我可能有的唯一其他解释是,这是因为某种项目或编译器配置.我在一个新的C++控制台应用程序VS2005中运行它.

谢谢

c++ exception-handling

0
推荐指数
1
解决办法
262
查看次数