两者有什么区别? 我的意思是方法都是一样的。 所以,对于一个用户来说,他们的工作是一致的。 那是对的吗??
class Person { public: int age; }; 我想将Person类的对象存储在优先级队列中。 priority_queue< Person, vector<Person>, ??? > 我觉得我需要为比较而定义一个类,但是我不确定。 另外,当我们写, priority_queue< int, vector<int>, greater<int> > 如何做更大的工作?
从http://www.cplusplus.com/reference/utility/pair/ ,我们知道std::pair有两个成员variables, first和second 。 为什么STLdevise者决定暴露两个成员variables, first和second ,而不是提供getFirst()和getSecond() ?
std::string和std::basic_string什么区别? 为什么都需要?
我想sorting一个vector vector<myClass> object; myclass包含很多intvariables。 我怎样才能在myClass任何特定的数据variables上sorting我的vector 。
我不明白为什么multimap存在,如果我们可以创buildvector地图或集地图。 对我而言,唯一的区别是: 在multimap中使用equal_range来获得一个键的元素,在vector地图中,我们简单地使用[]运算符并且具有元素的向量。 在multimap.insert(make_pair(key,value))使用multimap.insert(make_pair(key,value))在向量映射中添加元素和map_of_vectors[key].push_back(value) 。 那么为什么要使用multimap呢? 对我来说,最好有一个向量比两个迭代器来获得一个键的所有值。 这个问题也适用于vector和unordered_multimap的unordered_map。
我做了一个testing,比较几种语言的string操作,为服务器端应用程序select一种语言。 结果似乎是正常的,直到我终于尝试C ++,这让我很吃惊。 所以我想知道我是否错过了任何优化,并来这里寻求帮助。 testing主要是密集的string操作,包括连接和search。 testing在Ubuntu 11.10 amd64上执行,GCC版本为4.6.1。 该机器是戴尔Optiplex 960,具有4G RAM和四核CPU。 在Python(2.7.2)中: def test(): x = "" limit = 102 * 1024 while len(x) < limit: x += "X" if x.find("ABCDEFGHIJKLMNOPQRSTUVWXYZ", 0) > 0: print("Oh my god, this is impossible!") print("x's length is : %d" % len(x)) test() 这给出了结果: x's length is : 104448 real […]
在Herb Sutter's CppCon 2014的演讲中回到基础:现代C ++风格,他在幻灯片28( 这里是幻灯片的networking副本)中提到了这种模式: class employee { std::string name_; public: void set_name(std::string name) noexcept { name_ = std::move(name); } }; 他说这是有问题的,因为当用临时调用set_name()时,noexcept-ness不强(他使用短语“noexcept-ish”)。 现在,我已经在我自己最近的C ++代码中大量使用了上面的模式,主要是因为它每次都省去了inputset_name()的两个副本 – 是的,我知道每次强制执行一个复制构造可能会有点低效,但是,嘿,我是一个懒惰的typer。 然而草药的短语“这noexcept是有问题的 ”担心我,因为我没有在这里得到问题:std :: string的移动赋值运算符是noexcept,因为它的析构函数,所以上面set_name()似乎是保证noexcept。 在编译参数之前,我确实看到了编译器在 set_name() 之前抛出的一个潜在的exception,但是我很努力地认为这是个问题。 后来在幻灯片32草药明确指出,上述是一个反模式。 有人能向我解释为什么为什么我一直懒惰地写错代码?
我想用自定义比较函数创build一个std::set 。 我可以将它定义为一个带有operator()的类,但我希望能够定义一个lambda函数,因此我决定在类的构造函数的初始化列表中定义lambda函数,该类的std::set成员。 但是我不能得到lambda的types。 在我继续之前,这里是一个例子: class Foo { private: std::set<int, /*???*/> numbers; public: Foo () : numbers ([](int x, int y) { return x < y; }) { } }; 我search后发现两个解决scheme:一个,使用std::function 。 只要设置比较函数types为std::function<bool (int, int)>并像我一样传递lambda。 第二个解决scheme是写一个make_set函数,就像std::make_pair 。 解决scheme1: class Foo { private: std::set<int, std::function<bool (int, int)> numbers; public: Foo () : numbers ([](int x, int […]
可能重复: 在STL地图中,使用map :: insert比[]更好吗? 我想知道,当我将元素插入到地图中时,推荐的方法是什么。 我是不是该 map[key] = value; 要么 map.insert(std::pair<key_type, value_type>(key, value)); 我做了以下快速testing: #include <map> #include <string> #include <iostream> class Food { public: Food(const std::string& name) : name(name) { std::cout << "constructor with string parameter" << std::endl; } Food(const Food& f) : name(f.name) { std::cout << "copy" << std::endl; } Food& operator=(const Food& f) […]