小编Jos*_*ain的帖子

MySQL - 使一对值唯一

我有一个表有两个ID值的int值.这些ID本身可以在表格中显示任意次数,但它们应该只出现一次.

有没有办法让一对值唯一,并且仍允许单个值多次显示?

作为后续行动,如果可以,可以将这对值用作关键字吗?我目前有一个第3列,用于我的密钥的唯一自动增量值.

mysql composite-key unique-key

39
推荐指数
2
解决办法
3万
查看次数

std :: vector <bool>保证将所有条目默认为false?

我希望在将std :: vector调整为所需的容器大小后,我的std :: vector中的所有条目都为false.这似乎是测试的情况,但我似乎无法找到任何保证始终如此的文档.

我意识到我可以将自己设置为假,但如果已经保证每个条目默认为false(这是一个体面的大小的矢量,并且将在数千个地方创建),这似乎效率低下.

这有什么保证吗?提前致谢.

c++ vector

13
推荐指数
2
解决办法
9812
查看次数

什么是_dl_lookup_symbol_x? - C++分析

我正在使用valgrind/callgrind来配置我的服务器代码以进行一些优化.callgrind向我报告的两个最常用的调用(使用kcachegrind查看)是_dl_lookup_symbol_x和do_lookup_x.但是我不知道这些是什么,似乎无法找到任何关于它们的文档.

有谁能告诉我这两个功能在哪里使用,他们做了什么?

c++ profiling valgrind

12
推荐指数
2
解决办法
6400
查看次数

多态调用的成本 - C++

我正在用C++编写一个游戏,它有大约30个不同的角色,每个角色都略有不同.我有一个主类User,其中包含所有角色所需的所有数据.我的第一个实现只涉及30个角色的枚举和适当处理,但现在我想知道将User作为基类并且每个角色都是自己继承自User的类是否更好.

我主要担心的是,当有30多个类继承自单个基类时,多态方法调用的效率如何?我知道多态调用涉及虚拟表中的指针,但我不确定这是否意味着对整个表进行线性搜索以获得正确的方法,或者是否可以在恒定时间内完成.

如果有人可以用多个继承的类来评论多态方法调用的效率,我会很感激启发.

提前致谢!

c++ polymorphism

8
推荐指数
2
解决办法
2498
查看次数

具有不同概率的随机数

可能重复:
用于从列表中挑选的C++函数,其中每个元素具有不同的概率

我需要根据我可以定义的概率(.25,.50,.75)随机确定是或否结果(硬币翻转的种类).

因此,例如,我想随机确定是或否,其中有75%的机会被选中.我有什么选择?我可以使用C++库吗?

c++ random probability

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

std ::对象效率列表

假设你有一个类的std :: list.您可以通过两种方式制作此列表:1)

std::list<MyClass> myClassList;
MyClass myClass;
myClassList.push_front(myClass);
Run Code Online (Sandbox Code Playgroud)

使用此方法,将对象传递给列表时将调用复制构造函数.如果该类有许多成员变量,并且您多次进行此调用,则可能会变得昂贵.

2)

std::list<MyClass*> myClassList;
MyClass* myClass = new MyClass();
myClassList.push_front(myClass);
Run Code Online (Sandbox Code Playgroud)

此方法不会调用该类的复制构造函数.我不完全肯定在这种情况下会发生什么,但我认为该列表将创建一个新的MyClass*并分配参数的地址.事实上,如果你在堆栈而不是堆上创建myClass并让它超出范围,那么myClassList.front()是无效的,因此必须如此.

如果我错了,请反驳我,但我相信第二种方法对某些类来说效率更高.

c++ stl

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

将shared_ptr强制转换为void*

我正在使用libev,它需要将我的数据转换为void*以符合其预定义的结构.我需要将boost :: shared_ptr强制转换为void*,然后将void*转换回boost :: shared_ptr.这是我的代码

void foo(boost::shared_ptr<string>& a_string)
{
 void* data = (void*)a_string.get();
 boost::shared_ptr<string> myString((string*)data);
}
Run Code Online (Sandbox Code Playgroud)

我很确定这个工作正常,但是我的代码设置的方式我相信所有对我的字符串的shared_ptr引用都超出了范围,因为这个转换方法不会增加use_count,因此shared_ptr释放内存,而我仍然需要它.

有没有办法手动增加/减少use_count?理想情况下,当我转换为void*时,我会增加use_count,将我的void*传递给另一个函数,将void*转换回shared_ptr并减少use_count.

或者如果有人知道这个问题的另一种解决方案,我可以使用任何帮助

c++ boost shared-ptr

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

LibCurl WriteCallback (Async?) - C++

我使用以下代码成功进行了 http POST 调用:

std::string curlString;
CURL* pCurl = curl_easy_init();

if(!pCurl)
    return NULL;

string outgoingUrl = Url;
string postFields = fields;

curl_easy_setopt(pCurl, CURLOPT_TIMEOUT, 0);

curl_easy_setopt(pCurl, CURLOPT_URL, outgoingUrl.c_str());
curl_easy_setopt(pCurl, CURLOPT_POST, 1);

curl_easy_setopt(pCurl, CURLOPT_POSTFIELDS, postFields.c_str());
curl_easy_setopt(pCurl, CURLOPT_POSTFIELDSIZE, (long)postFields.size());

curl_easy_setopt(pCurl, CURLOPT_WRITEFUNCTION, CurlWriteCallback);
curl_easy_setopt(pCurl, CURLOPT_WRITEDATA, &curlString);

curl_easy_perform(pCurl);

curl_easy_cleanup(pCurl);
Run Code Online (Sandbox Code Playgroud)

写回调具有以下原型:

size_t CurlWriteCallback(char* a_ptr, size_t a_size, size_t a_nmemb, void* a_userp);
Run Code Online (Sandbox Code Playgroud)

有没有办法异步执行此操作?当前,它会在 curl_easy_perform 返回之前等待回调完成。这种阻塞方法不适用于有很多用户的服务器。

c++ curl libcurl

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

Boost :: asio :: ssl OpenSSL没有编译

我正在使用boost :: asio :: ssl.我已经通过sudo apt-get install openssl安装了openssl.在我的makefile中,我通过-lssl链接openssl.

编译时我收到错误:致命错误:openssl/conf.h:没有这样的文件或目录

任何人都可以告诉我我缺少什么或者我是否错误地包含了库?

openssl boost-asio

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

复制的可执行文件是否会在没有库的新机器上运行

如果我在安装了许多库的 linux 机器上编译 C++ 程序(例如 Boost),然后将该可执行文件复制到没有这些库的新 linux 机器上,该可执行文件是否仍能正常运行?

c++ linker executable

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