草庐IT

c++ - STL C++ 中的内存分配

我对STLC++中的内存重新分配有点困惑。例如,我知道如果我声明一个vector,并继续将元素推回其中,则该vector将在某个时候需要重新分配内存空间并将所有现有元素复制到其中。对于链表,不需要重新分配,因为元素不是连续存储在堆栈中的,每个元素使用一个指针指向下一个元素。我的问题是,C++中的其他STL的情况如何?例如,string、map、unordered_map?他们需要重新分配吗? 最佳答案 (免责声明:标准可能不需要此处指定的所有具体数据结构,但记住它们有助于将规则链接到具体内容)std::string~=std::ve

c++ - 给定 cbegin()、cend(),为什么没有 cfront()、cback()、cfind()、...?

所以,为了让代码如autovect=...;autoit=vect.begin(),end=vect.end();//wantconst_iterator,gettingiterator选择正确的begin()和end()重载,即使对于非常量容器,更明确的cbegin()/cend()添加了函数。为什么到此为止?关联容器有一个find()方法有同样的问题。序列容器有front()和back(),同样有同样的问题。这些缺失是明确的const版本遗漏,还是设计使然? 最佳答案 更广泛的API是有成本的,即使只是在寻找您想要的功能时跳过它

c++ - 将原始字节数组复制到空字节 vector 中的最有效方法

我有一个场景,我需要将原始动态分配的uint8_t数组的内容复制到一个vector中(无论何时发生这种情况,它都保证为空).vectormyVector;constuint8_t*myRawArray;复制操作尽可能高效且可移植(可能会使用各种编译器版本)对我来说非常重要。我想到的一种方法是:myVector.reserve(byteCount);myVector.insert(myVector.begin(),myRawArray,myRawArray+byteCount);关于速度与这个相比如何的任何想法:myVector.resize(byteCount);memcpy(myVe

c++ - 如何在编译时检测 C++ 中的 std::reference_wrapper

假设我们有一些可变参数模板,需要以不同方式处理std::reference_wrapper参数。我们怎样才能做到这一点? 最佳答案 你可以做一个特征来判断一个类型是否是reference_wrappertemplatestructis_reference_wrapper:false_type{};templatestructis_reference_wrapper>:true_type{};然后你可以用它来消除歧义:templatevoiddo_stuff(T&&t,false_type){coutvoiddo_stuff(T&&r

c++ - 不错的简短且可免费下载的 STL 教程

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭8年前。Improvethisquestion我想在面试前复习我的STL知识。谁能推荐简短且可免费下载的STL教程?谢谢。编辑:最好是PDF格式。

c++ - 如何成为C++库开发人员?

我想问一下,我应该挖掘哪些领域才能成为C++库开发人员。5年前我开始自学C++,对此我很感兴趣。在工作中,我使用C语言和Ruby,在学校里我主要使用Java和很少的C++,然而,C++是我最喜欢的语言。我买了很多C++书籍,一遍又一遍地读,这些书是:有效C++有效stl加速C++C++模板C++程序设计语言…等虽然我喜欢读C++模板书,但材料太干了,我觉得很难用。有时我想把它应用到我的项目中,但结果证明它是不必要的,更糟的是变得复杂,而且很难维护。此外,我发现很难实现像stl这样的库。我能部分理解的最简单的一个是std::vector或boost::array。其他图书馆就像一堆乱七八

c++ - std::ifstream 类的设计

我们这些看到了STL之美的人会尽可能多地使用它,并鼓励其他人在我们看到他们使用原始指针和数组的任何地方使用它em>。ScottMeyers写了一本关于STL的书,书名为EffectiveSTL.然而ifstream的开发人员发生了什么,他们更喜欢char*而不是std::string。我想知道为什么ifstream::open()的第一个参数是constchar*类型,而不是conststd::string&。请看一下它的签名:voidopen(constchar*filename,ios_base::openmodemode=ios_base::in);这是为什么?为什么不是这个:v

c++ - 如何避免在 map 中排序

有什么方法可以避免根据键值对map进行排序。实际上我想以相同的顺序显示所有对,我将其插入map。 最佳答案 为什么不使用成对vector?我想这就可以满足你的要求了 关于c++-如何避免在map中排序,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/5216477/

c++ - STL + typedefs 与 OOP,最佳实践?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭11年前。我“长大”学习使用OOP设置数据结构。但现在随着我对C++、STL和Boost的了解越来越多,我发现我的许多数据结构需求可以通过将STL类组合成更复杂的组合来满足,例如:typedefstd::map>CSVData;显然,当我需要混合数据类型时,这有一些限制,但通常我发现自己在避免OOP时可以使用这些STL组合,因为它们的简单性。这是一个普遍的进步吗?

c++ - 为什么 STL 中没有针对每个集合类型的 for_each 成员函数?

例如:v.for_each([](inti){printf("%d\n",i);});如果比常用的更优雅和可读:std::for_each(v.begin(),v.end(),[](inti){printf("%d\n",i);});标准中缺少这样的成员函数是否有正当理由? 最佳答案 这是整个库的标准设计原理:将容器与算法分开。如果按照自己的方式进行,则必须为每个容器Y实现每个功能X,如果您有M个功能和N个容器,则需要M*N个实现。通过使用迭代器并使算法在迭代器而不是容器上运行,您只需实现M个算法和N个迭代器接口(interface