所以,我写了一堆通过index []访问stl向量中的元素的代码,但现在我只需要复制一个向量块。 它看起来像vector.insert(pos, first, last)是我想要的function…除了我只有第一个和最后一个整数。 有没有什么好的方法可以得到这些值的迭代器?
使用Qt容器( QMap , QVector等)对STL等价物有什么优缺点? 我可以看到一个更喜欢Qt的理由: Qt容器可以传递给Qt的其他部分。 例如,它们可以用来填充一个QVariant然后一个QSettings (尽pipe只有QList和QMap / QHash的键被string接受)。 还有其他的吗? 编辑 :假设应用程序已经依赖于Qt。
确定一个STL映射是否包含给定键的值的最好方法是什么? #include <map> using namespace std; struct Bar { int i; }; int main() { map<int, Bar> m; Bar b = {0}; Bar b1 = {1}; m[0] = b; m[1] = b1; //Bar b2 = m[2]; map<int, Bar>::iterator iter = m.find(2); Bar b3 = iter->second; } 在debugging器中检查它,看起来像是垃圾数据。 如果我取消注释掉这一行: Bar b2 = m[2] debugging器显示b2是{i = 0} […]
我正在阅读这个问题的答案,发现实际上有一个名为length()的string(我总是使用size())。 在string类中使用此方法是否有任何特定的原因? 我读了MSDN和CppRefernce,他们似乎表明size()和length()之间没有区别。 如果是这样的话,对于这个class级的使用者来说是不是更令人困惑呢?
前一段时间,我和一位同事讨论了如何在STL 地图中插入值。 我更喜欢map[key] = value; 因为它感觉自然,而且读起来很清楚,而他更喜欢map.insert(std::make_pair(key, value)) 我只是问他,我们都不记得插入效果更好的原因,但我相信这不仅仅是一种风格偏好,而是有效率等技术原因。 SGI STL参考文件只是简单地说:“严格地说,这个成员函数是不必要的:它只是为了方便而存在的。” 有谁能告诉我这个理由,还是我梦想有一个?
我的意思是,除了它的义务名称(标准模板库)… C ++最初是想将OOP概念提供给C语言。那就是:你可以根据类和类的层次结构来说明一个特定的实体可以做什么(不pipe它是怎么做的)。 由于多重inheritance的问题,一些能力组合更难以描述,而且C ++支持接口的概念有点笨拙(与java等相比),但它在那里(可能是改善)。 然后模板和STL一起发挥作用。 STL似乎采用了传统的OOP概念,并使用模板来代替它们。 应该区分使用模板来概括types的情况,其中types本身与模板的操作无关(例如容器)。 有一个vector<int>是非常有意义的。 然而,在许多其他情况下(迭代器和algorithm),模板化types应该遵循一个“概念”(Input Iterator,Forward Iterator等),其中概念的实际细节完全由模板的实现来定义函数/类,而不是与模板一起使用的类,这是OOP的一些反用法。 例如,你可以告诉这个函数: void MyFunc(ForwardIterator<…> *I); 更新:由于在原来的问题中还不清楚,ForwardIterator可以自行模板化,以允许任何ForwardIteratortypes。 相反,将ForwardIterator作为一个概念。 希望只有通过查看其定义才能获得Forward Iterator,在此您需要查看以下实现或文档: template <typename Type> void MyFunc(Type *I); 我可以赞成使用模板的两个说法:通过为每个使用的types定制编译模板,而不是使用vtables,可以使编译代码更高效。 事实上,模板可以用于本机types。 然而,我正在寻找更为深刻的理由,为什么放弃古典OOP而赞成STL的模板化? (假设你读了那么多:P)
为什么C ++标准库中std::list类的反向函数具有线性运行时? 我认为对于双向链表,反向函数应该是O(1)。 倒转一个双向链表只需要切换头部和尾部的指针。
假设你有一架飞机,而且燃油很低。 除非飞机降低了3000磅的乘客重量,否则将无法到达下一个机场。 为了节省最多的生命,我们首先要把最重的人从飞机上抛下。 噢,飞机上有数百万人,我们希望有一个最佳的algorithm来find最重的乘客,而不必对整个列表进行sorting。 这是我试图用C ++编码的代理问题。 我想按重量对乘客舱单做一个“partial_sort”,但是我不知道我需要多less元素。 我可以实现我自己的“partial_sort”algorithm(“partial_sort_accumulate_until”),但我想知道是否有更简单的方法来使用标准的STL来做到这一点。
你如何检查一个元素是在一个集合? 有一个更简单的相当于下面的代码: myset.find(x) != myset.end()
我试图检查给定的键是否在地图上,有些不能这样做: typedef map<string,string>::iterator mi; map<string, string> m; m.insert(make_pair("f","++–")); pair<mi,mi> p = m.equal_range("f");//I'm not sure if equal_range does what I want cout << p.first;//I'm getting error here 那我该如何打印p中的内容呢?