Questions tagged «stl»

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


6
如何指定指向重载函数的指针?
我想将重载函数传递给std::for_each()算法。例如, class A { void f(char c); void f(int i); void scan(const std::string& s) { std::for_each(s.begin(), s.end(), f); } }; 我希望编译器f()按迭代器类型解析。显然,它(GCC 4.1.2)没有做到这一点。那么,如何指定f()我想要的呢?
137 c++  stl 

5
C ++双地址运算符?(&&)
我正在阅读STL源代码,我不知道&&应该使用哪个地址运算符。这是来自的代码示例stl_vector.h: vector& operator=(vector&& __x) // <-- Note double ampersands here { // NB: DR 675. this->clear(); this->swap(__x); return *this; } “地址地址”有意义吗?为什么它有两个地址运算符而不是一个?

3
如果在从头到尾迭代时在map元素上调用Erase()会发生什么?
在下面的代码中,我遍历了一个映射并测试是否需要删除一个元素。擦除元素并保持迭代是安全的吗,还是我需要将密钥收集到另一个容器中并进行第二次循环来调用delete()? map<string, SerialdMsg::SerialFunction_t>::iterator pm_it; for (pm_it = port_map.begin(); pm_it != port_map.end(); pm_it++) { if (pm_it->second == delete_this_id) { port_map.erase(pm_it->first); } } 更新:当然,我然后阅读了我认为不相关的问题,但回答了我的问题。
133 c++  stl  iterator 

7
如何根据对的第二个元素对向量进行排序?
如果我有一对向量: std::vector<std::pair<int, int> > vec; 有没有一种简单的方法可以基于该对的第二个元素按升序对列表进行排序? 我知道我可以编写一个可以完成工作的小函数对象,但是有没有办法使用STL的现有部分并std::less直接进行工作呢? 编辑:我了解我可以编写一个单独的函数或类以传递给第三个参数进行排序。问题是我是否可以用标准的东西建造它。我真的看起来像这样: std::sort(vec.begin(), vec.end(), std::something_magic<int, int, std::less>());
133 c++  stl  stdvector 

2
如何设置std :: vector的初始大小?
我有个vector<CustomClass*>向量,我在向量中放入了很多项目,我需要快速访问,所以我不使用列表。如何设置向量的初始大小(例如为20 000个位,所以在插入新的向量时避免复制)?
130 c++  stl 

7
为什么std :: queue :: pop不返回值?
我浏览了此页面,但无法获得相同的原因。那里提到 “更明智的做法是,它根本不返回任何值,并要求客户端使用front()来检查队列前端的值” 但是从front()检查元素还需要将该元素复制到左值中。例如在此代码段中 std::queue<int> myqueue; int myint; int result; std::cin >> myint; myqueue.push (myint); / *此处将在RHS上创建临时文件,并将其分配给结果,如果通过引用返回,则在弹出操作之后结果将变为无效* / result = myqueue.front(); //result. std::cout << ' ' << result; myqueue.pop(); 在第五行,cout对象首先创建myqueue.front()的副本,然后将其分配给结果。所以,有什么不同,pop函数可以做同样的事情。
123 c++  stl 


10
如何在不循环的情况下将数组的内容复制到C ++中的std :: vector?
我有一个值数组,该值数组是我需要存储以供以后处理的程序的不同部分传递给函数的。由于在处理数据之前我不知道函数会被调用多少次,因此我需要动态存储结构,因此我选择了std::vector。我不想push_back单独对所有值进行标准循环,如果我可以使用类似的内容将其全部复制,那就太好了memcpy。
121 c++  stl  vector  copy 


13
与std :: map等效的remove_if
我试图根据特定条件从地图中删除一系列元素。我该如何使用STL算法? 最初我想使用,remove_if但是由于remove_if对于关联容器不起作用,因此无法使用。 是否有适用于地图的“ remove_if”等效算法? 作为一个简单的选择,我想到了遍历映射和擦除。但是在地图上循环并擦除一个安全的选项吗?(因为迭代器在擦除后变得无效) 我使用以下示例: bool predicate(const std::pair<int,std::string>& x) { return x.first > 2; } int main(void) { std::map<int, std::string> aMap; aMap[2] = "two"; aMap[3] = "three"; aMap[4] = "four"; aMap[5] = "five"; aMap[6] = "six"; // does not work, an error // std::remove_if(aMap.begin(), aMap.end(), predicate); std::map<int, std::string>::iterator iter …
118 c++  stl  map 


4
如何重载std :: swap()
std::swap()在排序甚至分配期间,许多std容器(例如std::list和std::vector)都使用它。 但是std的实现swap()非常笼统,对于自定义类型而言效率很低。 因此,可以通过std::swap()使用自定义类型特定的实现进行重载来获得效率。但是如何实现它,以便将其用于std容器?

5
C ++映射访问丢弃限定符(const)
以下代码说,将map传递const到operator[]方法中会舍弃限定符: #include <iostream> #include <map> #include <string> using namespace std; class MapWrapper { public: const int &get_value(const int &key) const { return _map[key]; } private: map<int, int> _map; }; int main() { MapWrapper mw; cout << mw.get_value(42) << endl; return 0; } 这是因为在地图访问中可能进行分配吗?不能将具有地图访问权限的函数声明为const? MapWrapper.cpp:10: error: passing ‘const std::map<int, int, std::less<int>, …
113 c++  stl  const  maps 

9
插入地图的首选/惯用方式是什么?
我确定了将元素插入的四种不同方式std::map: std::map<int, int> function; function[0] = 42; function.insert(std::map<int, int>::value_type(0, 42)); function.insert(std::pair<int, int>(0, 42)); function.insert(std::make_pair(0, 42)); 哪一种是首选/惯用方式?(还有我没想到的另一种方式吗?)
111 c++  stl  insert  stdmap  std-pair 

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.