Questions tagged «stl»

标准模板库(STL)是包含通用容器,迭代器,算法和函数对象的C ++库。当C ++标准化时,STL的大部分被标准库所采用,并且标准库中的这些部分有时也被错误地统称为“ STL”。

7
为什么我们不能声明std :: vector <AbstractClass>?
我花了很多时间在C#中进行开发,但我注意到,如果您声明一个抽象类以便将其用作接口,则无法实例化此抽象类的向量来存储子类的实例。 #pragma once #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; class IFunnyInterface { public: virtual void IamFunny() = 0; }; class FunnyImpl: IFunnyInterface { public: virtual void IamFunny() { cout &lt;&lt; "&lt;INSERT JOKE HERE&gt;"; } }; class FunnyContainer { private: std::vector &lt;IFunnyInterface&gt; funnyItems; }; 声明抽象类向量的行在MS VS2005中导致此错误: error C2259: 'IFunnyInterface' : …

3
如何为我的班级提供交换功能?
启用我swap的STL算法的正确方法是什么? 1)会员swap。是否std::swap使用SFINAE技巧来使用成员swap。 2)swap在同一个命名空间中独立。 3)的部分专业化std::swap。 4)以上全部。 谢谢。 编辑:好像我没有清楚地说出我的问题。基本上,我有一个模板类,我需要STL算法才能使用为该类编写的(有效)交换方法。
87 c++  algorithm  stl  swap 


12
将地图值复制到STL中的矢量
目前,我正在通过有效的STL进行工作。第5项建议通常最好使用range成员函数而不是它们的单个元素对应项。我目前希望将地图中的所有值(即-我不需要键)复制到向量中。 什么是最干净的方法?
85 c++  stl  containers 

6
为什么需要std :: get_temporary_buffer?
我应该出于什么目的使用std::get_temporary_buffer?标准说: 获取一个足以存储最多n个相邻T对象的存储指针。 我以为缓冲区将在堆栈上分配,但这不是事实。根据C ++标准,此缓冲区实际上不是临时的。与全局函数相比,此函数有什么优势,全局函数::operator new也不构造对象。我对以下陈述是否等效? int* x; x = std::get_temporary_buffer&lt;int&gt;( 10 ).first; x = static_cast&lt;int*&gt;( ::operator new( 10*sizeof(int) ) ); 该功能仅存在于语法糖吗?为什么有temporary它的名字? 1996年7月1日在Dobb博士的日记中提出了一个用例来实现算法: 如果没有缓冲区可以分配,或者小于请求的缓冲区,则该算法仍然可以正常工作,只会减慢速度。

8
无法在Android NDK中包含像vector这样的C ++标头
当我尝试在我的Android NDK项目中使用vector之类的C ++类(使用最新的NDK r5b)时,出现如下错误: Compile++ thumb : test-libstl &lt;= test-libstl.cpp /Users/nitrex88/Desktop/Programming/EclipseProjects/STLTest/jni/test-libstl.cpp:3:18: error: vector: No such file or directory 其他在线上报告此问题的人通过添加 APP_STL := stlport_static 到他们的Application.mk文件。我已经做到了这一点,并尝试了APP_STL的所有其他可能值。我已经清理了项目,运行了ndk-build clean,删除了obj和libs文件夹,但是当我编译时仍然找不到向量类。自从NDK r5推出以来,我已经为此工作了几个星期,如果有人提出任何建议,我将非常感激。谢谢!

7
在std :: multiset中,如果找到一个元素,则有一个函数或算法可以擦除一个样本(单一或重复)
也许这是重复的,但是我没有找到任何搜索内容:erase(value)对std::multiset所有具有找到的值的元素调用时,将被删除。我能想到的唯一解决方案是: std::multiset&lt;int&gt;::iterator hit(mySet.find(5)); if (hit!= mySet.end()) mySet.erase(hit); 可以,但是我认为可能会更好。有任何想法吗 ?
83 c++  stl  multiset 

1
STL字符特征的重点是什么?
我注意到在我的SGI STL参考副本中,有一个有关角色特征的页面,但是我看不到如何使用这些特征?它们是否替换了string.h函数?似乎没有使用它们std::string,例如length()on上的方法std::string未使用Character Traitslength()方法。为什么存在性格特征,并且在实践中曾经使用过它们?

4
如何在map和unordered_map之间选择?
假设我想使用字符串作为键来映射数据。什么容器应该怎么选择,map还是unordered_map?unordered_map占用更多的内存,所以让我们假设内存不是问题,而关注的是速度。 unordered_map通常应该给出O(1)的平均复杂度,而O(n)的最坏情况。在什么情况下会达到O(n)?什么时候map可以获得比更高的时间效率unordered_map?当n小时会发生吗? 假设我将STLunordered_map与默认的haser Vs一起使用。地图。字符串是关键。 如果我要遍历元素而不是每次都访问单个元素,我应该优先map吗?

4
如何为地图创建自己的比较器?
typedef map&lt;string, string&gt; myMap; 在中插入新对时myMap,它将使用该键string通过自己的字符串比较器进行比较。是否可以覆盖该比较器?例如,我想通过键string的长度而不是字母来比较键。还是有其他方法可以对地图进行排序?
83 c++  stl  stdmap 

15
使用std :: fill填充数量不断增加的向量
我想填充一个vector&lt;int&gt;using std::fill,但此向量后应包含一个数字,而不是一个值。 我尝试通过将函数的第三个参数迭代一个来实现此目的,但这只会给我一个填充有1或2的向量(取决于++运算符的位置)。 例: vector&lt;int&gt; ivec; int i = 0; std::fill(ivec.begin(), ivec.end(), i++); // elements are set to 1 std::fill(ivec.begin(), ivec.end(), ++i); // elements are set to 2
82 c++  stl 


15
如何将字符串向量内推到字符串中(优雅的方式)
我正在寻找将字符串向量内嵌到字符串中的最优雅方法。以下是我现在使用的解决方案: static std::string&amp; implode(const std::vector&lt;std::string&gt;&amp; elems, char delim, std::string&amp; s) { for (std::vector&lt;std::string&gt;::const_iterator ii = elems.begin(); ii != elems.end(); ++ii) { s += (*ii); if ( ii + 1 != elems.end() ) { s += delim; } } return s; } static std::string implode(const std::vector&lt;std::string&gt;&amp; elems, char delim) { std::string …
81 c++  string  stl  stdstring  implode 

12
char * vs std :: string在C ++中[关闭]
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案能得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 什么时候应该使用std::string,什么时候应该使用C ++char*管理chars的数组? 似乎您应该使用char*性能(速度)是否至关重要,并且由于内存管理,您愿意接受一些冒险的业务。 还有其他情况要考虑吗?
81 c++  stl  stdstring  arrays 

6
std :: vector :: resize()与std :: vector :: reserve()
在这篇文章的评论部分有一个关于使用std::vector::reserve()vs的主题。std::vector::resize()。 这是原始代码: void MyClass::my_method() { my_member.reserve(n_dim); for(int k = 0 ; k &lt; n_dim ; k++ ) my_member[k] = k ; } 我相信要在中编写元素vector,正确的做法是调用std::vector::resize()而不是std::vector::reserve()。 实际上,以下测试代码在VS2010 SP1的调试版本中“崩溃”: #include &lt;vector&gt; using namespace std; int main() { vector&lt;int&gt; v; v.reserve(10); v[5] = 2; return 0; } 我是对还是错?VS2010 SP1是正确的还是错误的?
80 c++  stl  vector 

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.