Questions tagged «stl»

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


11
如何有效清除std :: queue?
我正在使用std :: queue来实现JobQueue类。(基本上,此类以FIFO方式处理每个作业)。在一种情况下,我想一次清除队列(从队列中删除所有作业)。我在std :: queue类中看不到任何清晰的方法。 如何有效实现JobQueue类的clear方法? 我有一个循环弹出的简单解决方案,但我正在寻找更好的方法。 //Clears the job queue void JobQueue ::clearJobs() { // I want to avoid pop in a loop while (!m_Queue.empty()) { m_Queue.pop(); } }
166 c++  stl  queue 


10
我应该将整个对象还是指向对象的指针存储在容器中?
从头开始设计新系统。我将使用STL来存储某些长期存在的对象的列表和地图。 问:我应该确保我的对象具有副本构造函数并将对象的副本存储在我的STL容器中,还是通常更好地自己管理生命和作用域并仅将指向这些对象的指针存储在我的STL容器中? 我意识到这在细节上有些欠缺,但是我正在寻找“理论上”更好的答案(如果存在),因为我知道这两种解决方案都是可行的。 使用指针有两个非常明显的缺点:1)我必须在超出STL的范围内自己管理这些对象的分配/取消分配。2)我不能在堆栈上创建一个临时对象并将其添加到我的容器中。 还有什么我想念的吗?
162 c++  stl  pointers 

3
如何获取指向原始数据的std :: vector指针?
我试图std::vector用作char数组。 我的函数接受一个空指针: void process_data(const void *data); 在我仅使用此代码之前: char something[] = "my data here"; process_data(something); 哪个按预期工作。 但是现在我需要动态性std::vector,因此我尝试了以下代码: vector<char> something; *cut* process_data(something); 问题是,如何将char向量传递给函数,以便可以访问向量原始数据(无论它是哪种格式–浮点数,等等)? 我尝试了这个: process_data(&something); 还有这个: process_data(&something.begin()); 但是它返回了一个指向乱码的指针,后者发出警告:warning C4238: nonstandard extension used : class rvalue used as lvalue。
160 c++  stl  vector 

3
标准容器的复杂性保证是什么?
显然;-)标准容器提供某种形式的保证。 哪种类型的担保以及不同类型的容器之间到底有什么区别? 从工作的SGI页(约STL)我拿出这样的: Container Types: ================ Container: Forward Container Reverse Container Random Access Container Sequence Front Insert Sequence Back Insert Sequence Associative Container Simple Associative Container Pair Associative Container Sorted Associative Container Multiple Associative Container Container Types mapped to Standard Containers ============================================= std::vector: Sequence Back Sequence Forward/Reverse/Random Container std::deque: Sequence …
160 c++  stl  containers  big-o 


6
通过std :: map进行迭代的顺序是否已知(并由标准保证)?
我的意思是-我们知道std::map的元素是根据键排序的。因此,假设键是整数。如果从迭代std::map::begin()到std::map::end()使用for,标准是否保证我将因此依次迭代具有键的元素(按升序排序)? 例: std::map<int, int> map_; map_[1] = 2; map_[2] = 3; map_[3] = 4; for( std::map<int, int>::iterator iter = map_.begin(); iter != map_.end(); ++iter ) { std::cout << iter->second; } 是否保证可以打印234或实现定义? 现实生活中的原因:我有一个std::map带int钥匙的。在极少数情况下,我想遍历所有具有关键意义而不是具体int价值的要素。是的,听起来std::vector是更好的选择,但是请注意我的“非常罕见的情况”。 编辑:我知道,的元素std::map已排序..无需指出(对于此处的大多数答案)。我什至在我的问题中写了它。 我在遍历容器时询问迭代器和顺序。感谢@Kerrek SB的回答。
158 c++  dictionary  stl  standards 

2
iterator-> second是什么意思?
在C ++中,a的类型是std::map<>::iterator什么? 我们知道it类型的对象std::map<A,B>::iterator有一个重载operator ->,它返回a std::pair<A,B>*,并且std::pair<>有一个firstand second成员。 但是,这两个成员对应什么,为什么我们必须以as的形式访问映射中存储的值it->second?
157 c++  stl  iterator 

7
将一个向量复制到另一个向量的快速方法
我更喜欢两种方式: void copyVecFast(const vec<int>& original) { vector<int> newVec; newVec.reserve(original.size()); copy(original.begin(),original.end(),back_inserter(newVec)); } void copyVecFast(vec<int>& original) { vector<int> newVec; newVec.swap(original); } 你怎么做呢?
155 c++  algorithm  stl 

5
分配向量后,它们会使用堆还是堆栈上的内存?
以下所有陈述是否正确? vector<Type> vect; //allocates vect on stack and each of the Type (using std::allocator) also will be on the stack vector<Type> *vect = new vector<Type>; //allocates vect on heap and each of the Type will be allocated on stack vector<Type*> vect; //vect will be on stack and Type* will be …
151 c++  stl  vector  stack  heap 





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.