草庐IT

stl-algorithm

全部标签

c++ - STL Containers - vector 、列表和双端队列之间的区别

如果我想在容器的开头也推送元素,我应该使用双端队列而不是vector吗?什么时候应该使用list,它有什么意义? 最佳答案 如果您需要在序列的开头和结尾进行有效的插入/删除以及随机访问,请使用deque;如果您需要在任何地方有效插入,请使用list,但会牺牲随机访问。list元素的迭代器和引用几乎在容器的任何突变下都​​非常稳定,而deque具有非常奇特的迭代器和引用失效规则(因此请仔细检查)。另外,list是基于节点的容器,而deque使用连续内存块,因此内存局部性可能具有渐近复杂度无法捕获的性能影响估计。deque几乎可以在任何

android - 将 STL 与 Android NDK 一起使用时出现 Eclipse 索引器错误

我在Ubuntu上使用带有EclipseIndigo的AndroidNDKr7。我将我的java项目设置为使用C++特性。我在C++端使用STL,所以我添加了APP_STL:=gnustl_static在Application.mk文件中。ndk-build成功编译了我的代码并创建了一个共享对象。但是Eclipse索引器提示缺少STL符号。例如"Method'push_back'couldnotberesolved""Symbol'vector'couldnotberesolved"只有在编辑器中打开C++文件时才会发生这种情况。最终eclipse不会创建我的apk。我添加了ndk随附

android - 将 STL 与 Android NDK 一起使用时出现 Eclipse 索引器错误

我在Ubuntu上使用带有EclipseIndigo的AndroidNDKr7。我将我的java项目设置为使用C++特性。我在C++端使用STL,所以我添加了APP_STL:=gnustl_static在Application.mk文件中。ndk-build成功编译了我的代码并创建了一个共享对象。但是Eclipse索引器提示缺少STL符号。例如"Method'push_back'couldnotberesolved""Symbol'vector'couldnotberesolved"只有在编辑器中打开C++文件时才会发生这种情况。最终eclipse不会创建我的apk。我添加了ndk随附

c++ - end() 在 STL 容器中是如何实现的?

所以当我们需要从头到尾遍历一个容器时,我们会写类似for(i=v->begin();i!=v->end();i++)假设i是容器v的迭代器。我的问题是“什么保证end总是指向容器中最后一个元素之后的元素?”STL是如何确保这种行为的,这种情况有没有可能是不正确的? 最佳答案 STL通过始终存储如下内容来确保这种行为:在结尾(双关语)中,end()是并不重要,只要始终是end()(显然,不能与任何其他节点混淆)。 关于c++-end()在STL容器中是如何实现的?,我们在StackOver

c++ - end() 在 STL 容器中是如何实现的?

所以当我们需要从头到尾遍历一个容器时,我们会写类似for(i=v->begin();i!=v->end();i++)假设i是容器v的迭代器。我的问题是“什么保证end总是指向容器中最后一个元素之后的元素?”STL是如何确保这种行为的,这种情况有没有可能是不正确的? 最佳答案 STL通过始终存储如下内容来确保这种行为:在结尾(双关语)中,end()是并不重要,只要始终是end()(显然,不能与任何其他节点混淆)。 关于c++-end()在STL容器中是如何实现的?,我们在StackOver

C++ STL : Which method of iteration over a STL container is better?

这对你们中的一些人来说可能看起来很无聊,但是以下两种对STL容器进行迭代的方法中哪一种更好?为什么?classElem;typedefvectorElemVec;ElemVecelemVec;//Method0for(ElemVec::iteratori=elemVec.begin();i!=elemVec.end();++i){Elem&e=*i;//Dosomething}//Method1for(inti=0;i方法0看起来像更简洁的STL,但方法1用更少的代码实现了相同的效果。对容器的简单迭代是all出现在任何源代码中的位置。所以,我倾向于选择方法1,它似乎可以减少视觉困惑和代

C++ STL : Which method of iteration over a STL container is better?

这对你们中的一些人来说可能看起来很无聊,但是以下两种对STL容器进行迭代的方法中哪一种更好?为什么?classElem;typedefvectorElemVec;ElemVecelemVec;//Method0for(ElemVec::iteratori=elemVec.begin();i!=elemVec.end();++i){Elem&e=*i;//Dosomething}//Method1for(inti=0;i方法0看起来像更简洁的STL,但方法1用更少的代码实现了相同的效果。对容器的简单迭代是all出现在任何源代码中的位置。所以,我倾向于选择方法1,它似乎可以减少视觉困惑和代

c++ - 为什么 std::map (以及 STL 中的其他关联容器)上没有 front() 方法?

STLreference似乎在概念上有所不同:一方面是“序列容器”(数组vector双端队列forward_list列表)另一方面,“关联容器”(setmultisetmapmultimapunordered_setunordered_multisetunordered_mapunordered_multimap)。另外,我们好像有:所有实现begin()方法的容器都返回一个指向容器中第一个元素的迭代器。只有具有front()方法的序列容器返回对容器中第一个元素的引用。我的理解是front()方法可以很容易地定义为begin()方法,只需取消引用它的返回值。因此,我的问题是:为什么没有

c++ - 为什么 std::map (以及 STL 中的其他关联容器)上没有 front() 方法?

STLreference似乎在概念上有所不同:一方面是“序列容器”(数组vector双端队列forward_list列表)另一方面,“关联容器”(setmultisetmapmultimapunordered_setunordered_multisetunordered_mapunordered_multimap)。另外,我们好像有:所有实现begin()方法的容器都返回一个指向容器中第一个元素的迭代器。只有具有front()方法的序列容器返回对容器中第一个元素的引用。我的理解是front()方法可以很容易地定义为begin()方法,只需取消引用它的返回值。因此,我的问题是:为什么没有

c++ - 共享库与接口(interface)中的 STL 对象的 GCC 兼容性

我有一个带有STL对象的应用程序,用作插件编写器的C++接口(interface)的一部分。我知道最好的兼容性选择是使用C接口(interface),但目前不可行。我知道libstdc++中从GCC3.4到4.8的所有内容在ABI方面都高度兼容。因此,例如,如果我使用GCC4.1编译,而插件供应商编写使用GCC4.7编译的代码,那么在具有对应于GCC4.7或更高版本的libstdc++版本的平台上,除了极端情况外,所有情况都很好,提供的STL使用仅限于.so内部,并且外部.so接口(interface)使用纯C,遗憾的是我不是这种情况。所以,我很好奇关于用作插件接口(interface