草庐IT

stl_algobase

全部标签

c++ - 在 std::pair 中使用 `std::make_pair`:C++ STL

我多次注意到,每当需要为(新)std::pair赋值时,都会使用std::make_pair。但是我没有发现make_pair函数有任何用处,因为我们可以直接输入值对,然后随意修改它们。例如:std::pairnewp;std::cin>>newp.first>>newp.second;newp.first=-1;那么这个函数到底有什么用呢? 最佳答案 std::make_pair用于创建具有指定值的std::pair对象。Createsastd::pairobject,deducingthetargettypefromthetyp

c++ - 如何实现is_STL_vector

我想为STL的vector模板参数专门化一个模板。像这样://(1)templateclassA{...};//(2)templateclassA>{...};我不关心vector元素的类型。我想按如下方式使用它:Aa1;//WillusethegeneralspecializationA>a2;//Willusethesecondspecialization总的来说,我一直在尝试定义类似于boost类型特征的东西。有点像templatestructis_stl_vector{//WillbetrueifTisavector,falseotherwisestaticconstboolv

c++ - 使STL对象线程安全的标准方法?

我需要几个线程安全的STL容器。基本上我在想我只需要为每个STL容器对象添加2个方法,.lock().unlock()我也可以把它分解成.lockForReading().unlockForReading().lockForWriting().unlockForWriting()可行的方法是可以接受任意数量的并行读取锁,但如果有写入锁,则读取和写入将被阻止。尝试锁定写入等待,直到lockForReading信号量下降到0。有没有标准的方法来做到这一点?我的计划是错误的还是短视的? 最佳答案 这真的有点糟糕。外部代码将无法识别或理解您

c++ - 如何将结构传递给 STL 映射?

typedefstruct{pthread_tthreadId;intacceptSocketD;char*message;}threadData;mapserverPortNumberThreadId;map::iteratorserverPortNumberThreadIdIter;用法:threadDataobj;obj.threadId=0;obj.acceptSocketD=0;obj.message="ExcuseMe,please!";serverPortNumberThreadId.insert(3490,obj);错误:error:nomatchingfunction

c++ - 从 STL 容器中 move 元素是否会将其从该容器中移除?

我有一个Foobar类,它带有一个输出“Wellhellothere!”的sayHello()方法。如果我写下面的代码vector>fooList;fooList.emplace_back(newFoobar());unique_ptrmyFoo=move(fooList[0]);unique_ptrmyFoo2=move(fooList[0]);myFoo->sayHello();myFoo2->sayHello();cout输出是:Wellhellothere!Wellhellothere!vectorsize:1我很困惑为什么会这样。当我迈出第一步时,fooList[0]不应该变

c++ - 如何将 std::unique_ptr<> 从一个 STL 容器移动到另一个?

问题我有一个模板容器MyContainer>它有一个std::deque和一个std::vector成员(member)。内部方法,send_to_purgatory_if(predicate),我想查看m_taskdq中的所有项目并从m_taskdq移动项目至m_purgatory,如果谓词的计算结果为真。问题我有两个问题正在努力解决:我的迭代器it如果我从循环内从m_taskdq中删除项目,则会被丢弃我很担心std::unique_ptr的状态如果我分两步进行移动(问题第1行和第2行-通过第2行,我认为std::unique_ptr指向的it未定义?)我应该如何修复此代码?temp

c++ - 如何检查 C++ STL vector 中存在的值并将函数应用于 vector 的每个元素?

我有两个问题与C++标准库的vector类有关。如何检查vector中是否已经存在一个值(假设是一个整数)?我想要的文字如下:“如果整数已经存在于vector中,则下一个,否则将其添加到vector的末尾。”如何应用一个包含参数的函数到vector中的每个元素?(看来我不能用for_each做到这一点)换句话说:“对vector中的每个z元素应用MyAddFn(i,j)”...或者也许我没有在STLvector序列容器的正确轨道上,我应该定义我自己的迭代器? 最佳答案 1)std::find(v.begin(),v.end(),5)

c++ - 如何用STL编写仿函数?

在STL中,以下是可能的:intcount=count_if(v.begin(),v.end(),bind2nd(less(),3));这将返回v中小于3的元素数。如何编写一个返回0到3之间元素数的仿函数?我知道boost对此有一些设施,但在纯STL中是否可行? 最佳答案 如果您的意思是使用标准库的仿函数组合工具,那么不会,至少在C++98中不会。在C++11中,您可以使用std::bind来任意组合仿函数:usingstd::placeholders;intcount=std::count_if(v.begin(),v.end()

c++ - 重新定义 < 运算符以在字符串的 STL 算法中使用

是否可以重新定义operator对于不修改std命名空间的字符串,让这个运算符在标准算法中使用?例如,我可以这样写:namespacestd{booloperatorlol={"a","b","ba","aa"};std::sort(lol.begin(),lol.end());}和“lol”将被打印多次。但是如果我移动operator在std命名空间之外,默认为operator将被使用并且不会打印任何内容。是否可以制作std::sort使用自定义operator不将其包含到std命名空间?是的,我知道,我可以将另一个比较器传递给std::sort但如果我能按照我的要求做以及如何做,这

c++ - 为什么包含任意 STL header 可以解决这些编译错误?

我的程序中有这个全局函数:staticboolIsValidType(constCString&cType){for(autopType:{"bmp","jpg","jpeg","gif","tif","tiff","png"})if(cType==CString(pType))returntrue;returnfalse;}它给了我以下编译错误:errorC3312:nocallable'begin'functionfoundfortype'initializer-list'errorC3312:nocallable'end'functionfoundfortype'initiali