草庐IT

c++ - 何时为键值数据选择 std::vector 而不是 std::map?

考虑到在主内存中搜索时缓存和数据局部性的积极影响,我倾向于使用std::vector与std::pair-喜欢键值项并对两者执行线性搜索,如果我知道键值项的总量永远不会“太大”而不会严重影响性能。最近我遇到了很多情况,我事先知道我将有大量键值项,因此选择了std::map从头开始。我想知道在上述情况下,您是如何决定使用合适的容器的。你会吗总是使用std::vector(或类似)?总是使用std::map(或类似)?对项目计数范围内的哪一个比另一个更可取有直觉吗?完全不同的东西?谢谢! 最佳答案 我很少将std::vector与线性搜

c++ - 如何在运行时确定您的 C++ 应用程序何时附加了 visual studio 调试器?

您如何在运行时确定visualstudio调试器是否附加到您的进程。我已经看到有关如何在.NET中执行此操作的说明,但我的进程是nativeC++进程。支持检测即时调试会很好,但不是严格要求。 最佳答案 Win32调用IsDebuggerPresent()听起来应该可行。 关于c++-如何在运行时确定您的C++应用程序何时附加了visualstudio调试器?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.

c# - 何时使用 C#/C++

每种语言最适合哪些编程领域?我喜欢C++和C#,但我更喜欢使用C#,因为.NET。我的问题是什么时候使用C++,什么时候使用C#?那么,如果您为一家公司制作财务应用程序,您会使用C#吗?(无需下载第3方库就可以轻松设计表单并连接到数据库,如果你制作高级算法,你会使用C++因为它的速度吗?这是我的想法。我刚看了视频@http://www.academicearth.org,而且大学似乎更喜欢使用C++进行机器学习。大家怎么看呢?业界对此有何看法。 最佳答案 尝试比较两者并不公平——如今,当您需要低级或可移植的高性能代码时,通常会使用C

c++ - dynamic_cast 何时因隐藏符号而失败?

根据关于可见性的gccwiki(https://gcc.gnu.org/wiki/Visibility,请参阅“C++异常问题(请阅读!)”)部分,但似乎也是一个示例(dynamic_castfailedwhenhidingsymbol),隐藏类可以导致有效的dynamic_cast失败。我想通过示例准确了解这种情况何时发生:任何人都可以给我一个小示例来正确理解效果吗?这是我的尝试和理解(在Linux上使用gcc>7):据我了解,我需要的是vaguelinkage发生,当基类没有关键方法时发生。所以我尝试了这个基本层次结构:classA{virtual~A();virtualvoidp

c++ - 何时不使用 RAII 进行资源管理

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭12年前。谁能给我提供一个或多个具体示例,说明RAII不是最有效的资源管理方法,为什么?

c++ - 何时在 C++ 中使用指针

我刚开始学习C++中的指针,我不太确定什么时候使用指针,什么时候使用实际对象。例如,在我的一项作业中,我们必须构建一个gPolyline类,其中每个点都由一个gVector定义。现在,我的gPolyline类变量如下所示:private:vectorpoints;如果我有vectorpoints,会有什么不同?另外,是否有关于何时使用指针的一般经验法则?提前致谢! 最佳答案 一般的经验法则是在需要时使用指针,并在可能时使用值或引用。如果您使用vector插入元素将复制这些元素,并且元素将不再连接到您插入的项目。当您存储指针时,vec

c++ - 'auto' 关键字如何知道何时使用 const_iterator 匹配函数重载?

我了解thisquestion的内容但是当使用函数重载时,事情是如何工作的呢?例如在std::map中定义了以下方法:iteratorfind(constkey_type&k);const_iteratorfind(constkey_type&k)const;如何使用auto关键字来选择一个或另一个?以下内容对我来说似乎不正确:autoi=mymap.find(key);//callsthenon-constmethod?constautoi=mymap.find(key);//callstheconstmethod? 最佳答案 s

c++ - 左值何时在 C++ 中 move 而不是复制?

鉴于以下情况:FoogetFoo(){Fooresult=doSomeWork();returnresult;}C++是否保证result会被move,而不是被复制?或者换句话说,编写returnstd::move(result)是多余的吗?在没有显式std::move强制转换的情况下,是否有任何(其他)标准规定将静默move而不是复制左值的情况?注意事项:假设Foo是可move构造的。忽略复制/move省略,这可能另外适用。 最佳答案 尽管move可能会被省略,但是是的。如果move构造函数可用,则永远不会发生复制。为了清楚起见,

c++ - **有符号**正整数的一元减运算符何时会导致溢出?

通常,INT_MIN是-2^n而INT_MAX是2^n-1是否可以保证,如果x是positive类型的int则expressoin-x没有不会导致溢出? 最佳答案 它是隐式保证的,因为它对所有允许的签名形式都是正确的:(以16位int为例)1的补码,INT_MIN=-32767,INT_MAX=32767二进制补码,INT_MIN=-32768,INT_MAX=32767符号和大小,INT_MIN=-32767,INT_MAX=32767不允许使用其他形式。正如我们所见,对于所有允许的形式,abs(INT_MIN)>=abs(INT

c++ - 依赖于参数的查找——何时完成,搜索什么,以及如何强制(或阻止)它?

我无法理解参数相关(Koenig)查找背后的规则。考虑下面的代码:#includeusingnamespacestd;namespaceadl{structTest{};voidfoo1(Testconst&){coutfoo1(Tconst&){coutvoidoperator()(Tconst&)const{coutvoidfoo2(Tconst&){cout它的输出是:ADLnotused(foo1)ADLused(foo2)ADLnotused(foo3)我原以为他们所有人都会使用ADL,但令我惊讶的是只有一部分人这样做了。ADL规则背后有哪些(我知道可能很血腥)细节?我对这个