小编Kir*_*rov的帖子

DFID(Dept-First Iterative Deeping)与IDA*(Iterative-Deeping A*)

我想知道这两种算法的优点和缺点是什么.我想写AddEmUp C++解决了,但我不确定应该使用哪种(IDA或DFID)算法.

我找到的最好的文章就是这篇文章,但看起来太旧了 - '93.有没有新的?

我认为IDA*会更好,但是......?还有其他想法吗?

任何想法和信息都会有所帮助.

谢谢 !(:

编辑:关于IDA*的一些好文章和算法的良好解释?

EDIT2:或者那个游戏有一些很好的启发式功能?我不知道如何想到一些:/

c++ algorithm artificial-intelligence solver

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

static_cast <char*>和(char*)之间的区别

这是我的第一个问题:)

我有一个桩文件,我打开它如下图所示;

ifstream in ( filename,  ios :: binary | ios :: in ) 
Run Code Online (Sandbox Code Playgroud)

然后,我希望在unsigned int hold中保存2字节数据;

unsigned int hold;
in . read(static_cast<char *>(&hold), 2); 
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎是正确的.但是,当我用它编译它时

g++  -ansi -pedantic-errors -Werror - -Wall  -o main main.cpp 
Run Code Online (Sandbox Code Playgroud)

编译器发出错误

error: invalid static_cast from type ‘unsigned int*’ to type ‘char*’ 
Run Code Online (Sandbox Code Playgroud)

实际上,我通过使用(char*)更改static_cast来解决这个问题

unsigned int hold;
in . read((char*)(&hold), 2); 
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  • static_cast<char*>和之间的区别是什么(char*)
  • 我不确定使用(char*)是否更安全.如果您有足够的知识,可以告诉我有关该主题的信息吗?

注意:如果您有更好的想法,请帮助我,以便我可以改进我的问题?

c++ file

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

HTML5 canvas"重置"fillStyle

我开始学习使用JavaScript和HTML5的画布.

我试图用不同的模式绘制几个元素,但我总是得到最后一个设置的模式.我尝试使用save()restore()方法存储堆栈统计信息,但我肯定在某个地方犯了错误,有人可以帮助我吗?

window.onload = function(){
    draw(100, 100, "http://www.itexto.net/devkico/wp-content/uploads/2011/03/stackoverflow-logo-250.png");
    draw(0, 0, "http://googlediscovery.com/wp-content/uploads/google-home.png");            

};

function draw(x, y, src) {
    var canvas = document.getElementById("myCanvas");
    var context = canvas.getContext("2d");

    context.save();

    var imageObj = new Image();
    imageObj.onload = function(){
        var pattern = context.createPattern(imageObj, "repeat");

        context.rect(x, y, 100, 100);

        context.fillStyle = pattern;
        context.fill();
    };
    imageObj.src = src;
    context.restore();
}
Run Code Online (Sandbox Code Playgroud)

javascript html5 canvas

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

C程序输出应该转到控制台,但不应该是可重定向的

我希望my_custom_print()输出出现在控制台上.但是,如果该计划的stderror或者stdout是从重定向shell,他们应该被重定向(正常),但是从输出my_custom_print()应该被忽略.

是否有可能写出my_custom_print()令人满意的上述条件?如果可能,怎么样?

c linux

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

如何在c ++代码中链接STL?

我在源文件sql_parse.cc中写了一些代码MySql 5.5.7rc.我使用过vector,allocator等等,但编译器没有与标准模板库(STL)链接.任何人都可以建议我该怎么办?

这是错误消息:

libsql.a(sql_parse.cc.o): In function `std::vector<std::basic_string<char,  
std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, 
std::char_traits<char>, std::allocator<char> > > >::push_back(std::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const&)':
sql_parse.cc:(.text._ZNSt6vectorISsSaISsEE9push_backERKSs[std::vector<std::basic_string<char, 
std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, 
std::char_traits<char>, std::allocator<char> > > >::push_back(std::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const&)]+0x74): undefined reference to 
`std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, 
std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > 
>::_M_insert_aux(__gnu_cxx::__normal_iterator<std::basic_string<char, 
std::char_traits<char>, std::allocator<char> >*, std::vector<std::basic_string<char, 
std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, 
std::char_traits<char>, std::allocator<char> > > > >, std::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const&)'

collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

c++ stl

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

通过函数指针调用函数 - 是否取消引用指针?有什么不同?

我都尝试- CC++两者很好地工作.

我是函数指针的新手,这是一个简单的代码,让我感到惊讶:

#include <assert.h>
void sort( int* arr, const int N );

int main () 
{
    int arr1[] = { 1, 5, 2, 6, 2 }; 
    int arr2[] = { 1, 5, 2, 6, 2 }; 

    void (*sort_ptr)( int*,  const int) = sort;

    sort_ptr( arr1, 5 );
    (*sort_ptr)( arr2, 5 );

    assert( arr1[0] == 1 && arr1[1] == 2 && arr1[2] == 2 && 
            arr1[3] == 5 && arr1[4] == 6 );
    assert( arr2[0] == 1 …
Run Code Online (Sandbox Code Playgroud)

c c++ function-pointers

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

如何在valgrind中跟踪/捕获"警告:syscall中的无效文件描述符-1"

valgrind 告诉我以下内容:

==13880== Warning: invalid file descriptor -1 in syscall close()
Run Code Online (Sandbox Code Playgroud)

有没有简单的方法来调查此错误?我的意思是 - 例如显示堆栈跟踪?

这是一个巨大的项目,我不能手动检查每个close.另外,我猜这对于坏域描述符的每个sys调用都是一样的.


我这样运行:

valgrind --trace-children=yes --track-fds=yes --log-fd=2 --error-limit=no \
         --leak-check=full --show-possibly-lost=yes --track-origins=yes \
         --show-reachable=yes ./exe
Run Code Online (Sandbox Code Playgroud)

exe与调试信息.

更大valgrind的输出是:

==13880== Conditional jump or move depends on uninitialised value(s)
==13880==    at 0x5A4022F: ??? (in /lib/i686/cmov/libc-2.11.3.so)
==13880==    by 0x5A57323: ??? (in /lib/i686/cmov/libc-2.11.3.so)
==13880==    by 0x5A56EC2: ??? (in /lib/i686/cmov/libc-2.11.3.so)
==13880==    by 0x5A5555B: localtime_r (in /lib/i686/cmov/libc-2.11.3.so)
==13880==    by 0x754E983: ??? (in /usr/lib/libapr-1.so.0.4.2)
==13880==    by 0x754EAC9: apr_time_exp_lt (in …
Run Code Online (Sandbox Code Playgroud)

c++ valgrind file-descriptor

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

打印std :: this_thread :: get_id()给出"非执行线程的thread :: id"?

这曾经很好地工作(然后外星人必须攻击我的电脑):

#include <thread>
#include <iostream>

int main()
{
    std::cout << std::this_thread::get_id() << std::endl;

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

现在它打印thread::id of a non-executing thread.

ideone.com会打印一些ID,但有趣的是可能导致我的平台出现这种行为.

$ uname -a
Linux xxx 3.13.0-77-generic #121-Ubuntu SMP Wed Jan 20 10:50:42 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?


编辑:嗯..当我添加

std::cout << pthread_self() << std::endl;
Run Code Online (Sandbox Code Playgroud)

行都打印相同的ID,但是当我删除它时,结果仍然是相同的 - "非执行线程".

c++ c++11 stdthread

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

使用-fopenmp编译时"无效控制谓词"错误

void random(int M,int a,int c,int *seq,int start,int size)
{
 int i = start;
 seq[0] = 1;
 seq[i] = (a * seq[i - size] + c) % M;
 i += size;
}

for(int iter = 0;iter < ceil((double)(n/size));iter++)
{      
  random(M,a,c,seq,1,1);    
}
Run Code Online (Sandbox Code Playgroud)

循环编译-fopenmpgcc给出"无效控制谓词"错误.怎么解决?

c openmp

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

从已经关闭的套接字接收数据?

假设我有一个服务器应用程序 - 使用UNIX套接字通过TCP连接.

连接是异步的 - 换句话说,客户端和服务器的套接字是非阻塞的.

假设以下情况:在某些情况下,服务器可能决定将某些数据发送到连接的客户端并立即关闭连接:使用shutdownwith SHUT_RDWR.

所以,我的问题是 - 是否有保证,当客户端调用时recv,它会收到(由服务器发送)数据?

或者,要接收数据,recv必须在服务器之前调用shutdown?如果是这样,我应该做什么(或者,更确切地说,我该怎么做),以确保客户收到数据?

c c++ unix sockets client-server

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