主要是为了好玩/好奇的问题:如何在C ++中编写一个for循环,这个循环会遍历bool两个值(即true和false ),仅使用bool操作(即不转换为其他types)? 背景是,我想检查一个方程如(A && B) || (!B && !C && !D) == true存在多less个解 (A && B) || (!B && !C && !D) == true ,并开始for (bool A=false; ??? ; ++A) for (bool B=false; …)编写类似于for (bool A=false; ??? ; ++A) for (bool B=false; …)卡住??? – 即继续循环的条件是什么? 当然我重写它使用int,而且我也知道一个do … while循环将起作用,但是我好奇于是否有可能编写这样的for循环? 而且因为SO似乎没有答案,我决定问:) 更新:请注意,在至less两个现在删除的答案中提出的for(bool A=false; !A; A=true)的“显而易见的”变体将只运行一个迭代,因为对于第二个情况,条件!A变为false ,循环结束。 […]
我有一个关于并行循环的问题。 我有以下代码: public static void MultiplicateArray(double[] array, double factor) { for (int i = 0; i < array.Length; i++) { array[i] = array[i] * factor; } } public static void MultiplicateArray(double[] arrayToChange, double[] multiplication) { for (int i = 0; i < arrayToChange.Length; i++) { arrayToChange[i] = arrayToChange[i] * multiplication[i]; } } public static void […]
我使用cppreference阅读了C ++中的枚举声明。 然后我做了Enum类,并检查它是否是类types或不使用std::is_class 。 #include <iostream> enum class Enum { red = 1, blue, green }; int main() { std::cout << std::boolalpha; std::cout << std::is_class<Enum>::value << '\n'; } 然后我编译并运行在Linux平台上的G ++编译器,它打印出false值。 那么是不是类的types? 如果枚举是一个类的types,那么为什么我得到错误的价值?
在.NET 4.0框架中添加了PLINQ,作为对LINQ的扩展。 它是什么? 它解决了什么问题? 什么时候适合,什么时候不适合?
虽然在一个开源项目中玩耍,但我试图ToString一个DateTime对象被编译器阻止。 当我跳到这个定义时,我看到了这个: public DateTime? timestamp; 可能有人请赐教我这是什么,为什么它可能是有用的?
编辑:这个问题出来了,我认为我aced它! 去StackOverflow! :d 我现在有考试了,去年考试的其中一个问题就是发现下面的构造函数的实现问题,并写出一个更正的问题。 Rectangle::Rectangle(string col, int len, int br) { setColour(col); length =len; breadth=br; } 类定义如下: class Polygon { public: Polygon(string col="red"); void printDetails(); // prints colour only virtual double getArea()=0; void setColour(string col); private: string colour; }; class Rectangle : public Polygon { public: Rectangle(string, int, int); void printDetails(); // prints colour and […]
我有以下class级: [Serializable] public class SomeModel { [XmlElement("SomeStringElementName")] public string SomeString { get; set; } [XmlElement("SomeInfoElementName")] public int SomeInfo { get; set; } } 其中(当填充一些testing数据时)以及使用XmlSerializer.Serialize()进行序列化时会得到以下XML: <SomeModel> <SomeStringElementName>testData</SomeStringElementName> <SomeInfoElementName>5</SomeInfoElementName> </SomeModel> 我需要的是: <SomeModel> <SomeStringElementName Value="testData" /> <SomeInfoElementName Value="5" /> </SomeModel> 有没有一种方法来指定此属性,而不写我自己的自定义序列化代码?
考虑N元素的std::vector v ,并且认为n第一个元素已经被sorting, n < N ,其中(Nn)/N非常小: 有一个聪明的方法使用STLalgorithmsorting这个向量比完整的std::sort(std::begin(v), std::end(v))更快吗? 编辑:澄清:(Nn)未分类的元素应插入在已sorting的n个第一个元素内的正确位置。 EDIT2:奖金问题:以及如何findn? (对应于第一个未分类的元素)
我将一些C99代码移植到C ++中,这些代码大量使用可变长度数组(VLA)。 我用一个在堆上分配内存的数组类来replaceVLA(堆栈分配)。 性能下降幅度很大,下降了3.2倍(见下面的基准)。 我可以在C ++中使用什么样的VLA快速replace? 我的目标是在重写C ++代码时将性能降到最低。 我build议的一个想法是编写一个在类中包含一个固定大小的存储(即可以堆栈分配)的数组类,并将其用于小型数组,并自动切换到大型数组的堆分配。 我的这个实现是在post的最后。 它工作得很好,但我仍然无法达到原始C99代码的性能。 要接近它,我必须增加这个固定大小的存储( MSL以下)到我不舒服的大小。 我不想在堆栈上分配太大的数组, 即使是那些不需要它的小数组,因为我担心它会触发堆栈溢出。 C99 VLA实际上不太容易这样做,因为它永远不会使用比需要更多的存储空间。 我来到std::dynarray ,但我的理解是,它没有被接受到标准(还?)。 我知道clang和gcc支持C ++中的VLA,但我也需要它与MSVC一起工作。 实际上,更好的可移植性是C ++重写的主要目标之一(另一个目标是将程序本来就是一个命令行工具)编译成可重用的库。 基准 MSL是MSL组大小,高于此大小我切换到堆分配。 一维和二维数组使用不同的值。 原始C99代码:115秒。 MSL = 0(即堆分配):367秒(3.2x)。 1D-MSL = 50,2D-MSL = 1000:187秒(1.63x)。 1D-MSL = 200,2D-MSL = 4000:143秒(1.24x)。 1D-MSL = 1000,2D-MSL = 20000:131(1.14x)。 增加MSL进一步提高了性能,但最终程序将开始返回错误的结果(我认为是由于堆栈溢出)。 这些基准与OS X上的clang 3.7一样,但是gcc 5显示了非常相似的结果。 码 这是我现在使用的“smallvector”实现。 我需要一维和二维vector。 我切换到大小MSL以上的堆分配。 template<typename […]
由于我们从Visual Studio 6切换到Visual Studio 2008,我们一直在使用MFC90.dll和msvc [pr] 90.dll以及清单文件在一个私人的并排configuration,以便不用担心版本或者将它们安装到系统中。 在SP1之前,这是工作正常(并仍然在我们的开发机器上正常工作)。 现在我们已经完成了SP1后的一些testing,自从昨天上午以来我一直在拉我的头发。 首先,我们的NSIS安装程序脚本从redist文件夹中提取dll和清单文件。 这些不再正确,因为应用程序仍然链接到RTM版本。 因此,我将_BIND_TO_CURRENT_VCLIBS_VERSION=1的定义添加到了我们所有的项目中,以便他们将使用redist文件夹中的SP1 DLL(或随着新服务包的出现)。 花了几个小时才find这个。 我已经从编译中检查了中间文件文件夹中生成的清单文件,并正确列出了9.0.30729.1 SP1版本。 我有双重和三重检查取决于一个干净的机器:它都链接到本地dll没有错误。 运行应用程序仍然得到以下错误: 应用程序未能正确初始化(0xc0150002)。 单击确定以终止该应用程序。 我在谷歌或微软所做的search都没有提出任何与我的具体问题有关的事情(但是有这个错误消息的2005年的点击率)。 任何人有任何类似的问题与SP1? 选项: find问题并解决问题,使其工作,因为它应该(首选) 安装redist 挖掘旧的RTM dll和清单文件,并删除#define使用当前的。 (我已经在早期的安装程序版本中获得了它们,因为微软将它们从您的redist文件夹中剔除)! 编辑:我已经尝试重新构buildclosures的定义(链接到RTM DLL),并且只要在文件夹中安装了RTM dll即可。 如果SP1 dll被放入,它会得到以下错误: c:\ Program Files \ … \ … \ X.exe 此应用程序无法启动,因为应用程序configuration不正确。 重新安装应用程序可能会解决此问题。 没有其他人必须处理这个问题吗? 编辑:只是为了咧嘴笑,我下载并在我的testing机上运行VS2008SP1的vcredist_x86.exe。 它工作。 使用SP1 DLL。 和我的RTM链接的应用程序。 但不是在SP1以前的私人并行分布。