我正在尝试寻找比我已经找到的解决方案更有效的组合问题解决方案。
假设我有一组N个对象(索引为0..N-1)并且希望考虑大小为K的每个子集(0<=K<=N)。存在S=C(N,K)(即“N选择K”)这样的子集。我希望将每个这样的子集映射(或“编码”)到0..S-1范围内的唯一整数。
以N=7(即索引为0..6)和K=4 ( S=35 ) 为例,目标映射如下:
0 1 2 3 --> 0
0 1 2 4 --> 1
...
2 4 5 6 --> 33
3 4 5 6 --> 34
为了说明的目的,N和K被选择得较小。然而,在我的实际应用中,C(N,K)太大,无法从查找表中获取这些映射。它们必须即时计算。
在下面的代码中,combinations_table
是一个预先计算的二维数组,用于快速查找C(N,K)值。
给出的所有代码均符合C++14标准。
如果子集中的对象按其索引的升序排列,则以下代码将计算该子集的编码:
template<typename T, typename T::value_type N1, typename T::value_type K1>
typename T::value_type combination_encoder_t<T, N1, K1>::encode(const T &indexes) …
Run Code Online (Sandbox Code Playgroud) 一施瓦茨计数器是为了保证在使用前一个全局对象初始化.
请考虑使用下面显示的Schwartz计数器.
文件Foo.h:
class Foo
{
Foo::Foo();
};
Run Code Online (Sandbox Code Playgroud)
文件Foo.cpp:
#include "Foo.h"
// Assume including Mystream.h provides access to myStream and that
// it causes creation of a file-static object that initializes
// myStream (aka a Schwartz counter).
#include "MyStream.h"
Foo::Foo()
{
myStream << "Hello world\n";
}
Run Code Online (Sandbox Code Playgroud)
如果在main()启动后运行Foo :: Foo(),则保证myStream的使用是安全的(即myStream将在使用前初始化),因为注释中提到了文件静态初始化对象.
但是,假设在main()启动之前创建了Foo实例,如果它是全局的则会发生.这显示在这里:
File Global.cpp:
#include "Foo.h"
Foo foo;
Run Code Online (Sandbox Code Playgroud)
请注意,Global.cpp不会像Foo.cpp那样获得文件静态初始化对象.在这种情况下,Schwartz计数器如何确保在foo之前初始化MyStream初始化程序(以及MyStream对象本身)?或者Schwartz计数器在这种情况下会失败吗?
我在Windows XP Pro版本2002 SP 3下运行带有.NET 3.5 SP 1的Visual Studio 2008版本9.0.30729.1 SP,带有Intel Core 2 Duo E8400 3 GHz处理器.
我正在开发一个使用Microsoft Patterns&Practices组的复合应用程序库(CAL)的C#WPF应用程序.
我在XAML中收到以下compliation错误:
"MC1000:此实现不是Windows平台FIPS验证的加密算法的一部分."
我找到了一个修补程序,应该在Microsoft知识库aritcle 935434中修复此问题.但是,此修补程序的安装程序报告以下错误:
"Windows Installer服务无法安装升级修补程序,因为要升级的程序可能会丢失,或者升级修补程序可能会更新程序的其他版本.请验证您的计算机上是否存在要升级的程序,并且您有正确的升级补丁."
此修补程序的页面列出了.NET 3.0作为先决条件.虽然我正在使用.Net 3.5,但我的机器也安装了.NET 3.0.因此,我希望安装此修补程序.我希望即使这个修补程序是针对.NET 3.0的,它仍然可以解决我的问题.
无论如何,我无法安装此修补程序.有没有人有任何关于我如何能够通过"这个实现不是...的一部分"的编译错误的替代建议?
谢谢,戴夫
我在VS 2008下使用Winsock.
我有一个专门通过阻塞调用accept()接受传入TCP连接请求的线程.当我的应用程序关闭时,我需要以某种方式取消阻止此线程,以便它可以执行其关闭工作并退出.有没有办法可以解锁accept()?
我将发布另一个问题,以防无法解锁accept().那个问题是:如果我对在accept()上被阻塞的线程进行硬杀死,那么会发生什么不好的事情(操作系统数据结构的损坏等)?
谢谢,戴夫
我试图使用RawCap来嗅探Windows localhost.然而,与其这样做的计费能力相反,它不起作用.我开始如下:
rawcap 127.0.0.1 echo.pcap
然后我运行了一个我写的回声TCP客户端/服务器测试应用程序.我使用客户端通过127.0.0.1发送一些数据,它确实打印在服务器上并发送回客户端,在那里也打印出来.但是,数据包捕获文件是空的.
我在Windows XP,SP3下运行.
是否有人知道我需要采取任何其他步骤才能使其工作?
在2011年7月20日添加的其他信息:我联系了生产RawCap的公司,他们建议确保我有管理员权限,我尝试嗅探ping 127.0.0.1,并尝试启用telnet并嗅探telnet 127.0.0.1 .我确实有管理员权限,RawCap看到ping数据包,但它没有看到telnet数据包.我也试过在另一台机器上嗅探127.0.0.1,我也在那里失败了.
最好,戴夫
我正在使用Windows XP/Visual C++ 2008.
我遇到了一个C++静态初始化顺序问题,我已经用众所周知的"首次使用的构造"成语解决了这个问题:
Foo foo; // Forget this
Foo &foo() // Do this instead
{
// Use ptr, not reference, to avoid destruction order problems
static Foo *ptr = new Foo();
return *ptr;
}
Run Code Online (Sandbox Code Playgroud)
但是,我一直在搜索,看起来Windows(我的平台)并不保证本地静态的线程安全,尽管它确实为全局静态提供了保证.
所以,如果我使我的对象全局化,我得到线程安全但我有初始化顺序问题.如果我使用"首次使用时构造",我会避免初始化顺序问题,但我会遇到竞争条件.我怎样才能同时解决这两个问题?
我正在使用Winsock编写TCP服务器应用程序.我的服务器将运行的机器和运行客户端的机器都有2个NIC.涉及的IP地址是:
问题1:在我的服务器应用程序中,如果在绑定我的侦听套接字时使用INADDR_ANY,我将使用哪两个IP地址?我是否正确地假设没有说明,我应该使用inet_addr("192.168.132.14")代替INADDR_ANY?
问题2:客户端如何控制连接到我时使用的IP地址?他会在调用connect()之前调用bind()吗?我是否有责任将他视为从任何一个地址连接(不知道哪一个),如果他不这样做?
main()
在下面的 C++ 代码中,在执行第一行之前发生分段错误。
即使在输入之前没有要构造的对象,也会发生这种情况main()
,并且如果我删除 .txt 文件第二行的(大)变量定义,则不会发生这种情况main()
。
我假设分段错误是由于定义的变量的大小而发生的。我的问题是为什么会在执行前一行之前发生这种情况?
由于优化器的指令重新排序,这似乎不应该发生。我这样说是基于所选的编译选项和调试输出。
定义的(数组)变量的大小是否会破坏堆栈/导致段错误?
看起来是这样,因为使用较小的数组(例如 15 个元素)不会导致分段错误,并且可以看到标准输出的预期输出。
#include <array>
#include <iostream>
#include <vector>
using namespace std;
namespace {
using indexes_t = vector<unsigned int>;
using my_uint_t = unsigned long long int;
constexpr my_uint_t ITEMS{ 52 };
constexpr my_uint_t CHOICES{ 5 };
static_assert(CHOICES <= ITEMS, "CHOICES must be <= ITEMS");
constexpr my_uint_t combinations(const my_uint_t n, my_uint_t r)
{
if (r > n - r)
r = n - …
Run Code Online (Sandbox Code Playgroud) 我希望Winsock TCP connect()调用以无限超时进行阻止。
问题:1.我该怎么做?
谢谢戴夫
我正在使用CRITICAL_SECTION对象.如果我的程序关闭时不调用DeleteCriticalSection(),操作系统会自动回收泄漏的资源吗?还是永久泄露?
谢谢,戴夫
请考虑以下代码:
std::stringstream test;
test << std::string("This is a test.");
std::string str;
test >> str;
std::cout << "\"" << str << "\"" << std::endl;
Run Code Online (Sandbox Code Playgroud)
这只输出字符串"This",而不是"This is a test".
为什么会这样,我怎样才能获得整个字符串?
c++ ×6
winsock ×3
tcp ×2
winapi ×2
.net ×1
algorithm ×1
c# ×1
c++14 ×1
combinations ×1
fips ×1
networking ×1
performance ×1
windows ×1
windows-xp ×1
wpf ×1