Questions tagged «c++»

C ++是一种通用编程语言。它最初被设计为C的扩展,并且具有类似的语法,但是现在它是一种完全不同的语言。使用此标记可解决有关将要使用C ++编译器编译的代码的问题。对于与特定标准修订版[C ++ 11],[C ++ 14],[C ++ 17]或[C ++ 20]等相关的问题,请使用特定于版本的标记。

14
在C / C#/ C ++中执行向后循环的最佳方法是什么?
我需要向后移动一个数组,所以我有如下代码: for (int i = myArray.Length - 1; i >= 0; i--) { // Do something myArray[i] = 42; } 有更好的方法吗? 更新:我希望C#可以为此提供一些内置机制,例如: foreachbackwards (int i in myArray) { // so easy } 更新2:有是更好的方法。符文获得以下奖项: for (int i = myArray.Length; i-- > 0; ) { //do something } //or for (int i …
101 c#  c++  c 

6
在案例陈述中使用{}。为什么?
什么是使用点{和}在一个case声明?通常,无论一条case语句中有多少行,所有行都将执行。这仅仅是有关旧/新编译器的规则吗? int a = 0; switch (a) { case 0:{ std::cout << "line1\n"; std::cout << "line2\n"; break; } } 和 int a = 0; switch (a) { case 0: std::cout << "line1\n"; std::cout << "line2\n"; break; }

13
我可以在C ++中实现自治的`self`成员类型吗?
C ++ 缺少等效于PHP的selfkeyword 的关键字,该关键字的值取决于封闭类的类型。 在每个类别的基础上伪造它很容易: struct Foo { typedef Foo self; }; 但我不得不Foo再次写信。也许有一天我会弄错这个错误,并导致一个无声的错误。 我可以使用和的某种组合decltype来“自动”进行此工作吗?我已经尝试了以下方法,但是this在那个地方无效: struct Foo { typedef decltype(*this) self; }; // main.cpp:3:22: error: invalid use of 'this' at top level // typedef decltype(*this) self; (我不必担心的等效项static,它的作用相同,但绑定较晚。)
101 c++  c++11 

7
加权随机数
我正在尝试实现加权随机数。我目前只是把头撞在墙上,无法解决这个问题。 在我的项目(Hold'em手范围,主观全能分析)中,我正在使用Boost的随机函数。因此,假设我要选择1到3之间的一个随机数(所以选择1、2或3)。Boost的mersenne扭曲生成器为此发挥了魅力。但是,我希望例如这样对选秀权进行加权: 1 (weight: 90) 2 (weight: 56) 3 (weight: 4) Boost是否为此具有某种功能?
101 c++  boost  random 

3
如何在无序容器中将std :: hash <Key> :: operator()专用于用户定义的类型?
为了支持用户定义的键类型std::unordered_set&lt;Key&gt;和std::unordered_map&lt;Key, Value&gt; 一个具有提供operator==(Key, Key)和散列函子: struct X { int id; /* ... */ }; bool operator==(X a, X b) { return a.id == b.id; } struct MyHash { size_t operator()(const X&amp; x) const { return std::hash&lt;int&gt;()(x.id); } }; std::unordered_set&lt;X, MyHash&gt; s; 仅std::unordered_set&lt;X&gt; 使用type 的默认哈希值编写将更方便X,例如与编译器和库一起提供的类型。经过咨询 C ++标准草案N3242§20.8.12 [unord.hash]和§17.6.3.4[hash.requirements], 增强无序 g ++ include\c++\4.7.0\bits\functional_hash.h …

5
从向量中删除元素
我想使用擦除方法从向量中清除元素。但是这里的问题是不能保证元素在向量中仅出现一次。它可能存在多次,我需要清除所有这些。我的代码是这样的: void erase(std::vector&lt;int&gt;&amp; myNumbers_in, int number_in) { std::vector&lt;int&gt;::iterator iter = myNumbers_in.begin(); std::vector&lt;int&gt;::iterator endIter = myNumbers_in.end(); for(; iter != endIter; ++iter) { if(*iter == number_in) { myNumbers_in.erase(iter); } } } int main(int argc, char* argv[]) { std::vector&lt;int&gt; myNmbers; for(int i = 0; i &lt; 2; ++i) { myNmbers.push_back(i); myNmbers.push_back(i); } erase(myNmbers, …
101 c++  vector  stl  erase 

3
如何使用g ++创建静态库?
有人可以告诉我如何从.cpp和.hpp文件创建静态库吗?我需要创建.o和.a吗?我也想知道如何在其中编译静态库并在其他.cpp代码中使用它。我有header.cpp,header.hpp .我想创造header.a。在中测试header.a test.cpp。我正在使用g ++进行编译。

5
与C ++中的普通指针相比,智能指针的开销是多少?
与C ++ 11中的普通指针相比,智能指针的开销是多少?换句话说,如果我使用智能指针,我的代码会变慢吗?如果这样,速度会慢多少? 具体来说,我在问C ++ 11 std::shared_ptr和std::unique_ptr。 显然,被压入堆栈的东西会更大(至少我认为是这样),因为智能指针还需要存储其内部状态(引用计数等),所以问题的实质是,这将要花费多少呢?会影响我的表现吗? 例如,我从函数而不是普通指针返回智能指针: std::shared_ptr&lt;const Value&gt; getValue(); // versus const Value *getValue(); 或者,例如,当我的函数之一接受智能指针作为参数而不是普通指针时: void setValue(std::shared_ptr&lt;const Value&gt; val); // versus void setValue(const Value *val);

2
此的std :: shared_ptr
我目前正在尝试学习如何使用智能指针。但是,在进行一些实验时,我发现以下情况,无法找到令人满意的解决方案: 假设您有一个类A的对象是类B(孩子)的对象的父对象,但两者应该彼此了解: class A; class B; class A { public: void addChild(std::shared_ptr&lt;B&gt; child) { children-&gt;push_back(child); // How to do pass the pointer correctly? // child-&gt;setParent(this); // wrong // ^^^^ } private: std::list&lt;std::shared_ptr&lt;B&gt;&gt; children; }; class B { public: setParent(std::shared_ptr&lt;A&gt; parent) { this-&gt;parent = parent; }; private: std::shared_ptr&lt;A&gt; parent; }; 问题是,类A的对象如何std::shared_ptr将自身(this)的a传递给它的子对象? …

7
如何将std :: unique_ptr传递给函数
如何将a传递std::unique_ptr给函数?可以说我有以下课程: class A { public: A(int val) { _val = val; } int GetVal() { return _val; } private: int _val; }; 以下内容无法编译: void MyFunc(unique_ptr&lt;A&gt; arg) { cout &lt;&lt; arg-&gt;GetVal() &lt;&lt; endl; } int main(int argc, char* argv[]) { unique_ptr&lt;A&gt; ptr = unique_ptr&lt;A&gt;(new A(1234)); MyFunc(ptr); return 0; } 为什么不能将a传递std::unique_ptr给函数?当然这是构建的主要目的吗?还是C ++委员会打算让我退回到原始C风格的指针并像这样传递它: …
101 c++  c++11  unique-ptr 


2
编译器错误:未在此范围内声明memset
我正在尝试在Ubuntu 9.10(gcc 4.4.1)中编译我的C程序。 我收到此错误: Rect.cpp:344: error: ‘memset’ was not declared in this scope 但是问题是我已经包含在我的cpp文件中: #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; 同样的程序在Ubuntu 8.04(gcc 4.2.4)下也可以正常编译。 请告诉我我想念的是什么。
100 c++  gcc 

8
“否则”是单个关键字吗?
我是C ++的新手。我经常看到如下条件语句: if statement_0; else if statement_1; 题: 语法上,我可以将其else if视为单个关键字吗?还是实际上是if在外部的嵌套语句,else如下所示? if statement_0; else if statement_1;

19
一起计算正弦和余弦的最快方法是什么?
我想同时计算一个值的正弦和余弦(例如,创建旋转矩阵)。当然,我可以像一样一个接一个地分别计算它们a = cos(x); b = sin(x);,但是我想知道在同时使用两个值时是否有更快的方法。 编辑: 总结到目前为止的答案: 弗拉德说,那是asm命令FSINCOS计算这两个(几乎在FSIN单独调用的同时) 像志注意到的那样,这种优化有时已经由编译器完成(使用优化标志时)。 caf指出,函数sincos和sincosf可能是可用的,可以通过直接包括math.h 关于使用查找表的 tanascius方法存在争议。(但是,在我的计算机上和在基准测试情况下,它的运行速度比以前快3倍sincos 32位浮点的精度几乎。) 乔尔·古德温(Joel Goodwin)链接了一种极快的近似技术的有趣方法,具有很高的准确度(对我来说,这比查表还要快)
100 c#  c++  c  algorithm  math 


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.