Questions tagged «stl»

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

16
如何将wstring转换为string?
问题是如何将wstring转换为string? 我有下一个例子: #include <string> #include <iostream> int main() { std::wstring ws = L"Hello"; std::string s( ws.begin(), ws.end() ); //std::cout <<"std::string = "<<s<<std::endl; std::wcout<<"std::wstring = "<<ws<<std::endl; std::cout <<"std::string = "<<s<<std::endl; } 带有注释行的输出是: std::string = Hello std::wstring = Hello std::string = Hello 但不只是: std::wstring = Hello 示例中有什么问题吗?我可以进行上述转换吗? 编辑 新的示例(考虑了一些答案)是 #include <string> #include …
204 c++  unicode  stl  wstring 

12
在STL映射中,使用map :: insert比[]更好吗?
前一段时间,我与一位同事讨论了如何在STL 映射中插入值。我更喜欢, map[key] = value; 因为它感觉自然并且易于阅读,而他更喜欢 map.insert(std::make_pair(key, value)) 我只是问他,我们俩都不记得插入效果更好的原因,但是我确信这不仅是样式偏好,还有技术上的原因,例如效率。在SGI STL参考只是说“严格地说,这个成员函数是不必要的:它的存在只是为了方便。” 谁能告诉我这个原因,还是我只是梦想有一个原因?
201 c++  stl  map  stdmap 

5
C ++ STL向量:从索引获取迭代器?
因此,我编写了一堆代码通过index []访问stl向量中的元素,但是现在我只需要复制向量的一部分即可。看起来vector.insert(pos, first, last)是我想要的功能...除了我只有第一个和最后一个作为整数。有什么好方法可以让我迭代这些值?
200 c++  stl  vector  iterator 

12
将最胖的人从超载的飞机上摔下来。
假设您有一架飞机,而且燃油低。除非飞机掉落3000磅的乘客重量,否则它将无法到达下一个机场。为了最大程度地挽救生命,我们希望首先将最重的人员从飞机上赶下。 哦,是的,飞机上有数百万人,我们希望找到一种最佳算法来查找最重的乘客,而不必对整个列表进行排序。 这是我尝试用C ++编写代码的代理问题。我想按重量对旅客舱单进行“ partial_sort”,但我不知道我需要多少元素。我可以实现自己的“ partial_sort”算法(“ partial_sort_accumulate_until”),但是我想知道是否有使用标准STL进行此操作的简便方法。
200 c++  algorithm  sorting  stl 

7
为什么在C ++ 11中使用非成员的begin和end函数?
每个标准容器都有一个beginand end方法,用于返回该容器的迭代器。但是,C ++ 11显然引入了称为std::begin和的自由函数,std::end它们调用begin和end成员函数。所以,不用写 auto i = v.begin(); auto e = v.end(); 你会写 auto i = std::begin(v); auto e = std::end(v); Herb Sutter 在他的写现代C ++的演讲中说,当您想要容器的开始或结束迭代器时,应该始终使用自由函数。但是,他没有详细说明您为什么要这么做。查看代码,可以节省一个字符。因此,就标准容器而言,自由功能似乎完全没有用。赫伯·萨特(Herb Sutter)表示,使用非标准容器也有好处,但是他没有详细介绍。 那么,问题到底是什么做的免费功能的版本std::begin,并std::end做超出调用它们相应的成员函数的版本,你为什么要使用它们?



7
STL中真正的双端队列是什么?
Наэтотвопросестьответына 堆栈溢出нарусском:Особенностьразмещениеэлементовв的std :: deque的 我正在查看STL容器并试图弄清它们的真正含义(即所使用的数据结构),但双端队列使我停了下来:我认为起初它是一个双链表,因此允许在两端插入和删除固定时间,但是操作员[] 承诺要在固定时间内完成,这让我感到困扰。在链表中,任意访问应为O(n),对吗? 如果它是一个动态数组,它如何在恒定时间内添加元素?应该提到的是,可能发生重新分配,并且O(1)是摊销成本,就像vector一样。 因此,我想知道这种结构允许在恒定时间内进行任意访问,而同时又无需将其移至更大的新位置。
192 c++  stl  deque 

13
您不应该继承std :: vector
好的,这确实很难让人承认,但是目前我确实有很强的诱惑力可以继承std::vector。 我需要大约10种针对矢量的自定义算法,并且希望它们直接成为矢量的成员。但是我自然也希望拥有的其余std::vector界面。好吧,作为守法公民,我的第一个想法是std::vectorMyVector班级成员。但是然后我将不得不手动重新提供所有std :: vector的接口。输入太多。接下来,我考虑了私有继承,因此我将using std::vector::member在公共部分写一堆,而不是提供方法。其实这也很乏味。 在这里,我确实确实认为我可以简单地从公开继承std::vector,但是在文档中提供警告,该类不应被多态使用。我认为大多数开发人员都有足够的能力来理解,无论如何都不应多态地使用它。 我的决定绝对不合理吗?如果是这样,为什么?您能否提供一种替代方法,使其他成员实际成为成员,而不涉及重新键入vector接口的所有内容?我对此表示怀疑,但如果可以的话,我会很高兴。 此外,除了一些白痴可以写类似的事实 std::vector<int>* p = new MyVector 使用MyVector 还有其他现实的危险吗?通过说现实,我舍弃了像想象一个需要指向矢量指针的函数之类的事情。 好吧,我已经说了我的案子。我犯罪了。现在由你来原谅我:)
189 c++  oop  inheritance  stl  vector 

14
STL或Qt容器?
使用Qt容器的优点和缺点(QMap,QVector在他们的STL等价物,等等)? 我可以看到一个偏爱Qt的原因: Qt容器可以传递到Qt的其他部分。例如,可以使用它们先填充a QVariant,然后填充a QSettings(尽管有一定限制,但仅接受QList和QMap/且QHash其键为字符串)。 还有其他吗? 编辑:假设应用程序已经依赖Qt。
185 c++  qt  stl 

10
在哪种情况下我应该使用特定的STL容器?
在C ++的书中,我一直在阅读STL容器,特别是有关STL及其容器的部分。现在,我确实了解它们中的每一个都有它们自己的特定属性,并且我几乎要记住它们的所有属性……但是我还不了解的是,在每种情况下都使用它们。 有什么解释?首选示例代码。




6
如何从C样式数组初始化std :: vector?
std::vector从C型数组初始化a的最便宜方法是什么? 示例:在下面的类中,我有一个vector,但是由于外部限制,数据将作为C样式数组传递: class Foo { std::vector<double> w_; public: void set_data(double* w, int len){ // how to cheaply initialize the std::vector? } 显然,我可以调用w_.resize()然后循环遍历元素,或调用std::copy()。有没有更好的方法?
174 c++  arrays  vector  stl 

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.