草庐IT

stl_algobase

全部标签

c++ - 那么在 STL 集合中可以安全地使用 unique_ptr 吗?

我对unique_ptr和右值移动哲学感到困惑。假设我们有两个集合:std::vector>autoCollection;std::vector>uniqueCollection;现在我预计以下操作会失败,因为不知道算法在内部做什么,并且可能会制作内部数据透视拷贝等,从而剥夺auto_ptr的所有权:std::sort(autoCollection.begin(),autoCollection.end());我明白了。并且编译器正确地不允许这种情况发生。然后我这样做:std::sort(uniqueCollection.begin(),uniqueCollection.end());然

c++ - 为什么我必须始终明确指定 STL 算法函数中的范围,即使我想在整个容器上工作?

使用STL的函数时,如sort()或min_element()我总是必须通过开始和结束明确指定范围:voidrange_example(){std::vectorlist={7,3,9,1,5,2};autofound_element=std::min_element(list.begin(),list.end());std::cout如果我打算只在容器的一部分上工作,这是有道理的,但更多时候我需要函数在整个容器上工作。是否有一个原因没有允许这样做的重载函数:std::vectorlist={7,3,9,1,5,2};autofound_element=std::min_element

c++ - 为什么我必须始终明确指定 STL 算法函数中的范围,即使我想在整个容器上工作?

使用STL的函数时,如sort()或min_element()我总是必须通过开始和结束明确指定范围:voidrange_example(){std::vectorlist={7,3,9,1,5,2};autofound_element=std::min_element(list.begin(),list.end());std::cout如果我打算只在容器的一部分上工作,这是有道理的,但更多时候我需要函数在整个容器上工作。是否有一个原因没有允许这样做的重载函数:std::vectorlist={7,3,9,1,5,2};autofound_element=std::min_element

c++ - STL中有 "magic"吗?

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter寻求指导。关闭10年前。让我先解释一下我所说的“魔法”是什么意思。我将使用Java中的两个示例:每个类都(直接或间接)继承Object类。Java不支持运算符重载,但+运算符是为String对象定义的。这意味着不可能在纯(*)Java中实现Object和String类。现在这就是我所说的“魔术”:要实现这些类,您需要编译器的一些特殊支持。我一直喜欢C++的一点是,据我所知,

c++ - STL中有 "magic"吗?

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter寻求指导。关闭10年前。让我先解释一下我所说的“魔法”是什么意思。我将使用Java中的两个示例:每个类都(直接或间接)继承Object类。Java不支持运算符重载,但+运算符是为String对象定义的。这意味着不可能在纯(*)Java中实现Object和String类。现在这就是我所说的“魔术”:要实现这些类,您需要编译器的一些特殊支持。我一直喜欢C++的一点是,据我所知,

c++ - C++ STL unordered_map 如何解决冲突?

C++STLunordered_map如何解决冲突?查看http://www.cplusplus.com/reference/unordered_map/unordered_map/,它说“唯一键容器中的两个元素不能有等价的键。”这应该意味着容器确实在解决冲突。但是,该页面并没有告诉我它是如何做到的。我知道一些解决冲突的方法,比如使用链表和/或探测。我想知道的是c++STLunordered_map是如何解决的。 最佳答案 标准对此的定义比大多数人似乎意识到的要多一些。具体而言,标准要求(§23.2.5/9):Theelements

c++ - C++ STL unordered_map 如何解决冲突?

C++STLunordered_map如何解决冲突?查看http://www.cplusplus.com/reference/unordered_map/unordered_map/,它说“唯一键容器中的两个元素不能有等价的键。”这应该意味着容器确实在解决冲突。但是,该页面并没有告诉我它是如何做到的。我知道一些解决冲突的方法,比如使用链表和/或探测。我想知道的是c++STLunordered_map是如何解决的。 最佳答案 标准对此的定义比大多数人似乎意识到的要多一些。具体而言,标准要求(§23.2.5/9):Theelements

c++ - 在 C++/STL 中是否有与 Python range() 等效的紧凑函数

如何使用C++/STL执行以下等效操作?我想用一系列值[min,max)填充std::vector。#Python>>>x=range(0,10)>>>x[0,1,2,3,4,5,6,7,8,9]我想我可以使用std::generate_n并提供一个仿函数来生成序列,但我想知道是否有更简洁的方法来使用STL? 最佳答案 在C++11中,有std::iota:#include#include//std::iotaintmain(){std::vectorx(10);std::iota(std::begin(x),std::end(x)

c++ - 在 C++/STL 中是否有与 Python range() 等效的紧凑函数

如何使用C++/STL执行以下等效操作?我想用一系列值[min,max)填充std::vector。#Python>>>x=range(0,10)>>>x[0,1,2,3,4,5,6,7,8,9]我想我可以使用std::generate_n并提供一个仿函数来生成序列,但我想知道是否有更简洁的方法来使用STL? 最佳答案 在C++11中,有std::iota:#include#include//std::iotaintmain(){std::vectorx(10);std::iota(std::begin(x),std::end(x)

c++ - 如果增加一个等于 STL 容器的结束迭代器的迭代器会发生什么

如果当迭代器指向vector的最后一个元素时,我将迭代器增加2会怎样?在thisquestion询问如何通过2个元素将迭代器调整为STL容器,提供了两种不同的方法:使用算术运算符的一种形式-+=2或++两次或使用std::advance()当迭代器指向STL容器的最后一个元素或更远时,我已经使用VC++7测试了它们的边缘情况:vectorvec;vec.push_back(1);vec.push_back(2);vector::iteratorit=vec.begin();advance(it,2);boolisAtEnd=it==vec.end();//trueit++;//orad