小编Vij*_*hew的帖子

C程序员的算法和数据结构实现

可能重复:
是否有任何具有通用数据结构的开源C库?

C程序员的算法和数据结构实现的最佳来源是什么?链接到开源库或书籍.(请不要指向Sedgewick,因为我已经有了他的书).

c algorithm data-structures

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

Smalltalk中的函数对象(或执行没有`value:`的块)

是否可以向对象发送匿名消息?我想组合这样的三个对象(想想FP):

 " find inner product "
 reduce + (applyToAll * (transpose #(1 2 3) #(4 5 6)))
Run Code Online (Sandbox Code Playgroud)

where reduce,applyToAlltranspose是对象+,*并且两个数组是传递给发送给这些对象的匿名消息的参数.是否有可能实现相同的使用块?(但没有明确的用法value:).

functional-programming smalltalk squeak pharo

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

有没有办法使文件描述符在Windows中非阻塞?

我想将我的代码从linux移植到windows。它是这样的:

void SetNonBlocking( int filehandle )
{
    int fhFlags;

    fhFlags = fcntl(filehandle,F_GETFL);
    if (fhFlags < 0)
    {
        perror("fcntl(F_GETFL)");
        exit(1);
    }

    fhFlags |= O_NONBLOCK;
    if (fcntl(filehandle,F_SETFL,fhFlags) < 0)
    {   
        perror("fcntl(F_SETFL)");
        exit(1);
    } 

    return;
}
Run Code Online (Sandbox Code Playgroud)

现在我想在 Windows 中也有同样的东西。有任何想法吗?实际上,我的文件句柄是通过 WinApi 方法创建的管道的读取端CreatePipe

c winapi file

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

一流的延续

对于将继续作为第一类对象暴露的一些批评是什么?

我觉得有一流的延续很好.它允许完全控制指令的执行流程.高级程序员可以针对某些类型的问题开发直观的解决方案.例如,continuation用于管理Web服务器上的状态.语言实现可以在延续之上提供有用的抽象.例如,绿色线程.

尽管如此,是否有强烈反对一流延续的论据?

ruby scheme continuations functional-programming

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

rm命令中模式的含义

rm在Makefile中找到了这个命令.

rm -f $(ODIR)/*.o *~ $(PROG) $(INCDIR)/*~

是什么意思*~

c unix linux makefile

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

C指针数组范围和函数调用

我有这种情况:

{
    float foo[10];
    for (int i = 0; i < 10; i++) {
         foo[i] = 1.0f;
    }
    object.function1(foo); // stores the float pointer to a const void* member of object
}
object.function2(); // uses the stored void pointer
Run Code Online (Sandbox Code Playgroud)

第二个函数调用中浮点指针的内容是否未知?当我运行程序时,似乎得到了奇怪的结果.但是如果我将float foo [10]声明为const并在声明中初始化它,我会得到正确的结果.为什么会这样?

c++ arrays scope

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

关于C++全局运算符new:为什么可以替换它

我在VS2005中编写了一个小程序来测试C++全局运算符new是否可以重载.它可以.

#include "stdafx.h"
#include "iostream"
#include "iomanip"
#include "string"
#include "new"

using namespace std;

class C {
    public:
        C() { cout<<"CTOR"<<endl; }
};

void * operator new(size_t size) 
{
    cout<<"my overload of global plain old new"<<endl;
    // try to allocate size bytes
    void *p = malloc(size);
    return (p);
}

int main() {
    C* pc1 = new C;
    cin.get();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在上面,我调用了operator new的定义.如果我从代码中删除该函数,则调用C:\ Program Files(x86)\ Microsoft Visual Studio 8\VC\crt\src \new.cpp中的operator new.

一切都很好.但是,在我看来,我对operator new的实现不会使new.cpp中的new重载,它会与它发生冲突并违反单一定义规则.为什么编译器不抱怨呢?或者说标准是否因为operator new非常特殊,单定义规则在这里不适用?

谢谢.

c++

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

#:当关键字信息时

我在哪里可以找到有关#:whenDrRacket建筑的文件?

这是完整的例子:

(define (problem_9 sum)
  (for*/first ([c (in-range 3 (- sum 2))]
               [b (in-range 2 c)]
               [a (in-range 1 b)]
               #:when (and (= (+ a b c) sum)
                           (= (+ (* a a) (* b b)) (* c c))))
    (+ a b c)))
Run Code Online (Sandbox Code Playgroud)

我理解它的目的,但想找到文档.

scheme racket

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

C++ - 是指向与1号动态数组相同的单个值的指针?

我有这段代码,我正在考虑简化:

if (numberOfResults > 1)
{

    trackResult_ = new TrackResult[numberOfResults];
    for (int i=0; i < numberOfResults; i++)
        {
            // Make a deep copy
            TrackResult tempResult = result[i];
            TrackResult * clone  = new TrackResult(tempResult);
            trackResult_[i]  = *clone;
        }

    storeJointResults(trackResult_, numberOfResults);
}
else
{
    trackResult_ = new TrackResult(*result);
}
Run Code Online (Sandbox Code Playgroud)

(我没有选择,只能在这里使用一个简单的动态数组.在我的工作场所,向量被认为'过于复杂')

我想知道我是否可以逃脱

// even if we just have one result, we init an array size of one
trackResult_ = new TrackResult[numberOfResults];
Run Code Online (Sandbox Code Playgroud)

但是,我已经在几个点检查结果的数量并采取相应的行动

if (numberOfResults_ == 1)
{
   velocity = trackResult_.velocity;
}
Run Code Online (Sandbox Code Playgroud)

这些代码仍然有效吗?如果没有,为什么?

c++ dynamic-arrays

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

套接字打开到http url并检索数据

我想使用socket.h的socket和connect以及recv方法打开一个插件到http url(https://www.abc.co.uk:8433/open/url/client?username=123&password=456).

问题是url使用8433端口和剩余的url(/ open/url/client?username = 123&password = 456).还使用https网址.

任何人都知道怎么做?很久以前,我做过标准的C编码,我忘了.

int sock;

char url[1024];

struct sockaddr_in client;
struct hostent *h;
if ((sock = socket(AF_INET,SOCK_STREAM,0)) == -1)
{ 
    perror("socket:");
    return;
}

sprintf(url, "https://www.abc.co.uk:%d/open/url/client?username=123&password=456", 8443);

client.sin_family = AF_INET;
client.sin_port = htons(8443);
h = gethostbyname(url);   
client.sin_addr.s_addr = inet_addr(h->h_addr_list[0]);
Run Code Online (Sandbox Code Playgroud)

c sockets url standards http

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

LINUX中库/可执行文件的大小很高

我们有一个使用C++创建的32位Gui应用程序.我们将应用程序从Solaris移植到Linux.我们面临的问题是

与Solaris相比,LINUX中的库和可执行文件的大小非常大.

Red Hat Enterprise Linux 5.4是我们使用的Linux版本.

请查找创建的示例动态库.我们想知道LINUX的以下行为是否正常.

考虑我们创建了两个文件test1.cc和test2.cc.两者都有一行代码.

a-2720@N530 /data1/users/a-2720/samp :ls  -lrt test1.cc test2.cc

-rw-rw-r--   1 a-2720   mcs           21 May 18 06:16 test1.cc

-rw-rw-r--   1 a-2720   mcs           21 May 18 06:16 test2.cc


a-2720@N530 /data1/users/a-2720/samp :cat test1.cc

    #include<iostream.h>


a-2720@N530 /data1/users/a-2720/samp :cat test2.cc

    #include<iostream.h>
Run Code Online (Sandbox Code Playgroud)

因此文件中只有一行

我使用这些文件创建了一个共享库.

SOLARIS

CC -c  -library=iostream  -g -mt test1.cc

CC -c  -library=iostream  -g -mt test2.cc

CC -G -h libtestsolaris.so test1.o test2.o -o libtestsolaris.so -library=iostream 

a-2720@N530 /data1/users/a-2720/samp :ls  -lrt test1.o test2.o libtestsolaris.so

-rw-rw-r--   1 a-2720   mcs        20944 May …
Run Code Online (Sandbox Code Playgroud)

c c++ linux

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