草庐IT

stl_algobase

全部标签

c++ - STL 或 Qt 容器?

使用Qt容器(QMap、QVector等)相对于其STL等效项有哪些优缺点?我可以看到一个喜欢Qt的理由:Qt容器可以传递给Qt的其他部分。例如,它们可用于填充QVariant和QSettings(但有一些限制,只有QList和QMap/QHash其键是字符串的)。还有其他的吗?编辑:假设应用程序已经依赖于Qt。 最佳答案 这是一个很难回答的问题。它真的可以归结为哲学/主观论点。话说回来……我推荐规则“在罗马时...像罗马人那样做”这意味着如果您在Qt领域,请像Qt'ians那样编写代码。这不仅仅是为了可读性/一致性问题。考虑一下如

C++ STL vector : Get iterator from index?

所以,我编写了一堆代码,通过index[]访问STLvector中的元素,但现在我只需要复制vector的一部分。看起来vector.insert(pos,first,last)是我想要的函数......除了我只有first和last作为整数。有什么好方法可以让我获得这些值的迭代器吗? 最佳答案 试试这个:vector::iteratornth=v.begin()+index; 关于C++STLvector:Getiteratorfromindex?,我们在StackOverflow上找

c++ - 在 STL 映射中,使用 map::insert 比使用 [] 更好吗?

前段时间,我和同事讨论了如何在STL中插入值maps.我更喜欢map[key]=value;因为它感觉自然且易于阅读,而他更喜欢map.insert(std::make_pair(key,value))。我刚问过他,我们都不记得插入更好的原因,但我确信这不仅仅是风格偏好,而是效率等技术原因。SGISTLreference简单地说:“严格来说,这个成员函数是不必要的:它的存在只是为了方便。”谁能告诉我这个原因,还是我只是梦想有一个? 最佳答案 当你写作时map[key]=value;无法判断您是替换key的value,还是创建新的ke

c++ - STL 中的某些容器没有查找功能

一些STL容器,例如std::list和std::vector没有find()方法作为成员函数。这是为什么?我知道可以使用std::find来自但这种用途仍然不是100%天然的。 最佳答案 一般的设计原则是尽可能使用std::find,效率更高的时候实现find成员函数。do具有find成员的容器是具有比std::find中执行的线性搜索更有效的元素查找机制的容器。例如,像std::set和std::map这样的二叉搜索树,或者像它们的unordered对应物这样的哈希表。 关于c++-

c++ - STL 中的某些容器没有查找功能

一些STL容器,例如std::list和std::vector没有find()方法作为成员函数。这是为什么?我知道可以使用std::find来自但这种用途仍然不是100%天然的。 最佳答案 一般的设计原则是尽可能使用std::find,效率更高的时候实现find成员函数。do具有find成员的容器是具有比std::find中执行的线性搜索更有效的元素查找机制的容器。例如,像std::set和std::map这样的二叉搜索树,或者像它们的unordered对应物这样的哈希表。 关于c++-

c++ - STL中的 vector 图?

我想要一个vector图,(但我不想使用指针作为内部vector),可以吗?//definemymapofvectormap>map;//insertanemptyvectorforkey10.#CompileErrormap.insert(pair>(10,vector));我知道如果我使用了vector的指针,如下,就可以了,但是我想知道我是否可以避免使用指针并使用上面的数据结构(我不想手动删除)//definemymapofvectormap*>map;//insertanemptyvectorforkey10.map.insert(pair*>(10,newvector));

c++ - STL中的 vector 图?

我想要一个vector图,(但我不想使用指针作为内部vector),可以吗?//definemymapofvectormap>map;//insertanemptyvectorforkey10.#CompileErrormap.insert(pair>(10,vector));我知道如果我使用了vector的指针,如下,就可以了,但是我想知道我是否可以避免使用指针并使用上面的数据结构(我不想手动删除)//definemymapofvectormap*>map;//insertanemptyvectorforkey10.map.insert(pair*>(10,newvector));

c++ - 如何逐个添加两个 STL vector 的元素?

这个问题很愚蠢,但我需要以一种非常有效的方式来做——它将在我的代码中一遍一遍地执行。我有一个返回vector的函数,我必须将返回的值逐个元素添加到另一个vector中。很简单:vectorresult;vectorresult_tempfor(inti=0;i我正在尝试做的数学运算是u[i]=u[i]+v[i]对于所有i可以做什么?谢谢编辑:添加了一个简单的初始化,因为这不是重点。结果应该如何初始化? 最佳答案 看起来问题确实是访问不存在的result值。tzaman展示了如何将结果初始化为10个元素,每个元素的值为0。现在您需要调

c++ - 如何逐个添加两个 STL vector 的元素?

这个问题很愚蠢,但我需要以一种非常有效的方式来做——它将在我的代码中一遍一遍地执行。我有一个返回vector的函数,我必须将返回的值逐个元素添加到另一个vector中。很简单:vectorresult;vectorresult_tempfor(inti=0;i我正在尝试做的数学运算是u[i]=u[i]+v[i]对于所有i可以做什么?谢谢编辑:添加了一个简单的初始化,因为这不是重点。结果应该如何初始化? 最佳答案 看起来问题确实是访问不存在的result值。tzaman展示了如何将结果初始化为10个元素,每个元素的值为0。现在您需要调

c++ - C++11 是否改变了对 STL 容器元素的要求,以及如何改变?

最近我对std::unique_ptrisacceptableforelementsofSTLcontainers的事实感到惊讶,因为我认为这些元素是提供以下功能所必需的(thispage也一样):没有参数的公共(public)默认构造函数公共(public)拷贝构造函数公共(public)复制赋值运算符函数公共(public)析构函数但是std::unique_ptr是不可复制的,使其持有的指针归单个对象所有,这与上述要求相矛盾。标准是否改变了要求?如果有,有哪些变化?也许可移动对象或可复制对象就足够了?我已经在网上搜索了自C++11以来要求是否发生了变化,但我找不到任何对我有帮助的