Tag: stl

在C ++映射中迭代键

有没有一种方法来遍历键,而不是一对C ++地图?

插入地图的首选/惯用方式

我已经确定了插入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)); 哪一种是首选/惯用的方式? (还有没有想过的另一种方式?)

标准C ++库中有哪些exception类

什么是包含在标准C ++库中的exception类,它们应该用于什么? 我知道有一些新的C ++ 11的例外,但我不知道他们是什么或他们在哪里。

为什么我需要std :: get_temporary_buffer?

为了什么目的,我应该使用std::get_temporary_buffer ? 标准说以下几点: 获得足够存储多达n个相邻T对象的存储器的指针。 我认为缓冲区将被分配在堆栈上,但事实并非如此。 根据C ++标准,这个缓冲区实际上不是临时的。 这个函数对全局函数::operator new有什么好处,它不会构造对象。 我说得对,下面的说法是相同的吗? int* x; x = std::get_temporary_buffer<int>( 10 ).first; x = static_cast<int*>( ::operator new( 10*sizeof(int) ) ); 这个函数是否只存在语法糖? 为什么在它的名字中有temporary ? Dobb's Journal博士在1996年7月1日提出了一个用例来实现algorithm: 如果没有缓冲区可以分配,或者如果它小于请求,algorithm仍然正常工作,它只是减慢速度。

用gdb检查标准容器(std :: map)的内容

假设有这样的事情: #include <map> int main(){ std::map<int,int> m; m[1] = 2; m[2] = 4; return 0; } 我希望能够从gdb中检查运行该程序的地图的内容。 如果我尝试使用下标运算符,我会得到: (gdb) pm[1] Attempt to take address of value not located in memory. 使用find方法不会产生更好的结果: (gdb) p m.find(1) Cannot evaluate function — may be inlined 有没有办法做到这一点?

std :: map插入或std :: map查找?

假设您想要保存现有条目的地图。 20%的时间,你插入的条目是新的数据。 是否有利用做std :: map :: find然后std :: map :: insert使用返回的迭代器? 还是更快尝试插入,然后根据迭代器是否指示logging是否插入?

基于范围的“for”循环是否弃用了许多简单的algorithm?

algorithm解答: std::generate(numbers.begin(), numbers.end(), rand); 基于范围的循环解决scheme: for (int& x : numbers) x = rand(); 为什么我要在C ++ 11中使用更详细的std::generate基于范围的for循环?

C ++地图访问丢弃限定符(const)

下面的代码说,将const作为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>, std::allocator<std::pair<const int, int> > […]

为什么std :: set没有“contains”成员函数?

我大量使用std::set<int> ,我经常只需要检查这样的一个集合是否包含一个数字。 我很自然地写: if (myset.contains(number)) … 但是由于缺less一个contains成员,我需要编写繁琐的代码: if (myset.find(number) != myset.end()) .. 或者不那么明显: if (myset.count(element) > 0) .. 有这个devise决定的原因吗?

C ++ STL中的const_iterator和非const迭代器有什么区别?

const_iterator和iterator之间有什么区别,你会在哪里使用它们?