草庐IT

stl-algorithm

全部标签

c++ - 如何使用带有指针 vector 的 STL 算法

我有一个不属于容器的指针vector。如何在指针的目标上使用算法。我尝试使用boost的ptr_vector,但它会在超出范围时尝试删除指针。下面是一些需要工作的代码:vectormyValues;//...myValuesispopulatedboolconsistent=count(myValues.begin(),myValues.end(),myValues.front())==myValues.size();autov=consistent?myValues.front():accumulate(myValues.begin(),myValues.end(),0)/myVal

c++ - STL:存储引用或值?

我一直对STL容器(vector、列表、map...)如何存储值感到有些困惑。他们是存储对我传入的值的引用,还是他们自己复制/复制构造+存储值?例如,inti;vectorvec;vec.push_back(i);//does&(vec[0])==&i;和classabc;abcinst;vectorvec;vec.push_back(inst);//does&(vec[0])==&inst;谢谢 最佳答案 STLContainers复制构造并存储您传入的值。如果您想将对象存储在容器中而不复制它们,我建议在容器中存储指向该对象的指针

c++ - STL:存储引用或值?

我一直对STL容器(vector、列表、map...)如何存储值感到有些困惑。他们是存储对我传入的值的引用,还是他们自己复制/复制构造+存储值?例如,inti;vectorvec;vec.push_back(i);//does&(vec[0])==&i;和classabc;abcinst;vectorvec;vec.push_back(inst);//does&(vec[0])==&inst;谢谢 最佳答案 STLContainers复制构造并存储您传入的值。如果您想将对象存储在容器中而不复制它们,我建议在容器中存储指向该对象的指针

c++ - STL 映射到自身?

我想创建一个std::map,其中包含一个std::vector迭代器,以实现一个简单的基于邻接列表的图形结构.但是,类型声明让我很困惑:您似乎需要整个映射类型定义来获取所述映射的迭代器类型,如下所示:map::iteratorMyMap_it;//whatshouldSomethingbe?map>MyMap_t;是否有某种部分映射迭代器类型我可以只使用键类型来获得,所以我可以声明完整映射? 最佳答案 您可以使用新类型的前向声明。classMapItContainers;typedefmap::iteratorMyMap_it;c

c++ - STL 映射到自身?

我想创建一个std::map,其中包含一个std::vector迭代器,以实现一个简单的基于邻接列表的图形结构.但是,类型声明让我很困惑:您似乎需要整个映射类型定义来获取所述映射的迭代器类型,如下所示:map::iteratorMyMap_it;//whatshouldSomethingbe?map>MyMap_t;是否有某种部分映射迭代器类型我可以只使用键类型来获得,所以我可以声明完整映射? 最佳答案 您可以使用新类型的前向声明。classMapItContainers;typedefmap::iteratorMyMap_it;c

c++ - 从函数返回 STL 容器

从函数返回STL容器的最佳方式(性能方面)是什么?返回的容器通常包含数千个项目。方法一:typedefstd::listItemContainer;ItemContainerCreateManyItems(){ItemContainerresult;//fillthe'result'...returnresult;}ItemContainera=CreateManyItems();方法二:voidCreateManyItems(ItemContainer&output){ItemContainerresult;//fillthe'result'...output.swap(result

c++ - 从函数返回 STL 容器

从函数返回STL容器的最佳方式(性能方面)是什么?返回的容器通常包含数千个项目。方法一:typedefstd::listItemContainer;ItemContainerCreateManyItems(){ItemContainerresult;//fillthe'result'...returnresult;}ItemContainera=CreateManyItems();方法二:voidCreateManyItems(ItemContainer&output){ItemContainerresult;//fillthe'result'...output.swap(result

C++ STL unordered_map 实现,引用有效性

对于std::map和std::tr1::unordered_map,我从标准中看到:Referencestoelementsintheunordered_mapcontainerremainvalidinallcases,evenafterarehash.他们是如何做到的(实现方面)?他们是否将所有条目维护为一种链表,然后哈希表只存储指向元素的指针? 最佳答案 是的,涉及到链表,但与您建议的方式不完全一样。2011年标准说(23.2.5第8段),“无序关联容器的元素被组织成桶。具有相同哈希码的键出现在同一个桶中。”在每个桶中,元素

C++ STL unordered_map 实现,引用有效性

对于std::map和std::tr1::unordered_map,我从标准中看到:Referencestoelementsintheunordered_mapcontainerremainvalidinallcases,evenafterarehash.他们是如何做到的(实现方面)?他们是否将所有条目维护为一种链表,然后哈希表只存储指向元素的指针? 最佳答案 是的,涉及到链表,但与您建议的方式不完全一样。2011年标准说(23.2.5第8段),“无序关联容器的元素被组织成桶。具有相同哈希码的键出现在同一个桶中。”在每个桶中,元素

c++ - STL Containers - vector 、列表和双端队列之间的区别

如果我想在容器的开头也推送元素,我应该使用双端队列而不是vector吗?什么时候应该使用list,它有什么意义? 最佳答案 如果您需要在序列的开头和结尾进行有效的插入/删除以及随机访问,请使用deque;如果您需要在任何地方有效插入,请使用list,但会牺牲随机访问。list元素的迭代器和引用几乎在容器的任何突变下都​​非常稳定,而deque具有非常奇特的迭代器和引用失效规则(因此请仔细检查)。另外,list是基于节点的容器,而deque使用连续内存块,因此内存局部性可能具有渐近复杂度无法捕获的性能影响估计。deque几乎可以在任何