我正在尝试实施加权随机数.我现在只是把头靠在墙上,无法解决这个问题.
在我的项目(德州扑克手牌范围,主观全权证券分析)中,我正在使用Boost的随机函数.所以,假设我想选择1到3之间的随机数(所以要么是1,2或3).Boost的mersenne twister发电机就像这样的魅力.但是,我希望选择加权,例如:
1 (weight: 90)
2 (weight: 56)
3 (weight: 4)
Run Code Online (Sandbox Code Playgroud)
Boost是否具有某种功能?
我有一个JArray
代表json子串的代码[1,2,3]
.我想把它变成一个int[]
.
这样做的正确方法是什么?我到目前为止找到的最好方法是执行以下操作:
int[] items = new int[myJArray.Count];
int i = 0;
foreach (int item in myJArray)
{
items[i++] = item;
}
Run Code Online (Sandbox Code Playgroud) 这听起来有点复杂,所以让我解释一下:
Project_A已在其自己的Mercurial存储库中存活了一段时间.Project_A现在正在进入一个新的超级项目Super-Project_B.Super-Project_B也有一个mercurial存储库.我们希望Project_A不是一个subrepo,而只是一个普通的孩子,但我们也不想失去历史.有没有办法做到这一点?
基本上,为什么需要一个非常简单的概念的两个抽象?
我刚刚意识到我在枚举中的"必须处理"值列表中添加了一个值,但直到运行时我才抓到它.我知道C#编译器在涉及类型的反射和内省时非常强大,所以我想知道是否有办法强制switch
/ case
语句覆盖所有可能的enum
值?
例:
enum Colors
{
Red,
Blue,
Green,
Yellow
};
Colors c = ...;
switch (c)
{
case Colors.Red: // No error, Red is a Color
break;
case Colors.Blue:
case Colors.Green: // No error, Blue and Green handled as well
break;
} // whoops! "error: 'Colors.Yellow' unhandled"
// or even, "error: no 'default' and 'Colors.Yellow' unhandled"
Run Code Online (Sandbox Code Playgroud)
我想要一个编译时的解决方案.
我认为我对rvalue引用并不十分了解.为什么以下错误无法编译(VS2012)'foo' : cannot convert parameter 1 from 'int' to 'int &&'
?
void foo(int &&) {}
void bar(int &&x) { foo(x); };
Run Code Online (Sandbox Code Playgroud)
我会假设int &&
从bar传递到foo时将保留该类型.为什么它会int
在函数体内转换成一次?
我知道答案是使用std::forward
:
void bar(int &&x) { foo(std::forward<int>(x)); }
Run Code Online (Sandbox Code Playgroud)
所以也许我只是没有清楚地掌握原因.(另外,为什么不std::move
呢?)
我有一个第三方库,即使在/ W3下也会产生大量警告.有没有办法让我告诉编译器,"为此目录或其子目录中包含的任何文件禁用C4244"?当然,我不想在我们自己的代码库中禁用警告,也不想跟踪每个可能的包含并用它包装它#pragma warning(...
我甚至不关心它们是否是真正的"调试"版本,我真正想要的只是符号文件,这样当我进入调试器时,我的callstack不会变得无效.
在内部,JsonConvert.SerializeObject(obj, Formatting.Indented)
归结为
JsonSerializer jsonSerializer = JsonSerializer.Create(null);
StringWriter stringWriter = new StringWriter(new StringBuilder(256), (IFormatProvider) CultureInfo.InvariantCulture);
using (JsonTextWriter jsonTextWriter = new JsonTextWriter((TextWriter) stringWriter))
{
jsonTextWriter.Formatting = formatting;
jsonSerializer.Serialize((JsonWriter) jsonTextWriter, value);
}
return stringWriter.ToString();
Run Code Online (Sandbox Code Playgroud)
这很好用.但是,如果我执行以下操作:
string json;
JsonSerializer jsonSerializer = JsonSerializer.Create();
using (var stream = new MemoryStream())
using (var streamWriter = new StreamWriter(stream, Encoding.UTF8))
using (var jsonWriter = new JsonTextWriter(streamWriter))
{
serializer.Serialize(jsonWriter, cmd);
stream.Position = 0;
using (var reader = new StreamReader(stream))
{
json = reader.ReadToEnd();
}
}
Run Code Online (Sandbox Code Playgroud)
随后的值json
是 …
我有一个迭代容器的函数,并将每个元素传递给谓词进行过滤.此函数的重载也会将每个元素的索引传递给谓词.
template<typename TContainer>
void DoSomethingIf(TContainer &c, std::function<bool (const typename TContainer::const_reference)> predicate);
template<typename TContainer>
void DoSomethingIf(TContainer &c, std::function<bool (const typename TContainer::const_reference, int)> predicate);
Run Code Online (Sandbox Code Playgroud)
我发现尝试使用裸lambda 调用这些函数中的任何一个将导致VC11中的编译器错误,而使用std :: function对象将成功:
void foo()
{
std::vector<int> v;
// fails
DoSomethingIf(v, [](const int &x) { return x == 0; });
// also fails
auto lambda = [](const int &x) { return x == 0; };
DoSomethingIf(v, lambda);
// success!
std::function<bool (const int &)> fn = [](const int &x) { return x == 0; };
DoSomethingIf(v, …
Run Code Online (Sandbox Code Playgroud)