我想将给定类的对象映射到另一个对象。 然而,我想用作键的类不是由我写的,而是一个具有几个值的简单struct 。 std :: map命令它的内容,我想知道它是如何做到的,以及是否有任意的类可以用作关键字,或者是否有需要定义的一组需求(运算符和哪些不需要)。 如果是这样,我可以为实现操作符映射用途的类创build一个包装器。 我只需要知道我需要实现的第一个,没有我在线上find的类的引用指定它们。
什么时候应该使用std::string ,什么时候应该用char*来pipe理C ++中的char数组? 看来你应该使用char*如果性能(速度)是至关重要的,并且由于内存pipe理你愿意接受一些冒险的业务。 还有其他情况需要考虑吗?
有没有办法减lessvector的容量? 我的代码将值插入到一个向量中(事先不知道它们的数量),当这些完成时,向量仅用于读取操作。 我想我可以创build一个新的vector,做一个.reseve()的大小和复制项目,但我不喜欢额外的复制操作。 PS:我不关心便携式解决scheme,只要它适用于gcc。
我想改变一个整数的项目的默认顺序是字典而不是数字,我不能得到以下用g ++编译: file.cpp: bool lex_compare(const int64_t &a, const int64_t &b) { stringstream s1,s2; s1 << a; s2 << b; return s1.str() < s2.str(); } void foo() { set<int64_t, lex_compare> s; s.insert(1); … } 我得到以下错误: error: type/value mismatch at argument 2 in template parameter list for 'template<class _Key, class _Compare, class _Alloc> class std::set' error: expected […]
为什么标准将end()定义为一个结束,而不是实际结束?
我正在使用指向对象的向量。 这些对象是从一个基类派生的,并被dynamic地分配和存储。 例如,我有这样的东西: vector<Enemy*> Enemies; 我将从Enemy类派生,然后为派生类dynamic分配内存,如下所示: enemies.push_back(new Monster()); 什么是我需要注意的事情,以避免内存泄漏和其他问题?
如果你有一个已经resize的STL向量,可以安全地取出元素0的地址,并假设向量的其余部分将在内存中? 例如 vector<char> vc(100); // do some stuff with vc vc.resize(200); char* p = &vc[0]; // do stuff with *p
声称使用标准C ++容器作为基类是一个错误,这让我感到惊讶。 如果没有滥用语言来宣布… // Example A typedef std::vector<double> Rates; typedef std::vector<double> Charges; 那么,确切的说是… // Example B class Rates : public std::vector<double> { // … } ; class Charges: public std::vector<double> { // … } ; B的积极优势包括: 启用函数的重载,因为f(Rates&)和f(Charges&)是不同的签名 使其他模板成为专用的,因为X <费率>和X <费用>是不同的types 前向声明是微不足道的 debugging器可能会告诉你该对象是一个费率还是费用 如果随着时间的推移,利率和收费发展个性化 – 一个单一的利率,一个收费的输出格式 – 这个function有一个明显的实施范围。 A的积极优势包括: 不必提供构造函数的简单实现等 这个十五年前的标准编译器是唯一能够编译你的遗产的编译器,不会窒息 由于专业化是不可能的,所以模板X <费率>和模板X <费用>将使用相同的代码,所以没有无意义的膨胀。 这两种方法都优于使用原始容器,因为如果实现从vector <double>更改为vector […]
我一直想知道为什么你不能使用本地定义的类作为STLalgorithm的谓词。 在这个问题: 接近STLalgorithm,lambda,本地类和其他方法 ,BubbaT提到说:“ 由于C ++标准禁止本地types作为参数 ” 示例代码: int main() { int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; std::vector<int> v( array, array+10 ); struct even : public std::unary_function<int,bool> { bool operator()( int x ) { return !( x % 2 ); } }; std::remove_if( v.begin(), v.end(), even() […]
如果我有一个对的向量: std::vector<std::pair<int, int> > vec; 有没有简单的方法来根据对的第二个元素升序排列列表? 我知道我可以写一个小的函数对象来完成这个工作,但是有没有办法使用STL和std::less现有部分来直接完成这个工作? 编辑:我明白,我可以编写一个单独的函数或类传递给第三个参数进行sorting。 问题是我是否可以用标准的东西来构build它。 我真的看起来像这样: std::sort(vec.begin(), vec.end(), std::something_magic<int, int, std::less>());