草庐IT

Iterator

全部标签

c++ - end() 是否需要在 STL 映射/集中保持不变?

标准中的第23.1.2.8节规定,对集合/映射的插入/删除操作不会使这些对象的任何迭代器无效(指向已删除元素的迭代器除外)。现在,考虑以下情况:您想要实现一个具有唯一编号节点的图,其中每个节点都有固定数量(比如4个)的邻居。利用上述规则,您可以这样做:classNode{private://iteratorstoneighboringnodesstd::map::iteratorneighbors[4];friendclassGraph;};classGraph{private:std::mapnodes;};(EDIT:由于第4行中的Node不完整(见回复/评论),因此并非字面上如此

c++ - end() 是否需要在 STL 映射/集中保持不变?

标准中的第23.1.2.8节规定,对集合/映射的插入/删除操作不会使这些对象的任何迭代器无效(指向已删除元素的迭代器除外)。现在,考虑以下情况:您想要实现一个具有唯一编号节点的图,其中每个节点都有固定数量(比如4个)的邻居。利用上述规则,您可以这样做:classNode{private://iteratorstoneighboringnodesstd::map::iteratorneighbors[4];friendclassGraph;};classGraph{private:std::mapnodes;};(EDIT:由于第4行中的Node不完整(见回复/评论),因此并非字面上如此

c++ - 为什么迭代器需要默认构造

forward、bidirectional和randomaccess类别的迭代器需要默认可构造。为什么会这样,为什么input和output运算符不必是默认可构造的? 最佳答案 前向迭代器和更强的迭代器需要引用一些外部序列(参见[forward.iterators]/6,其中说“如果a和b都是可解引用的,那么a==b当且仅当*a和*b绑定(bind)到同一个对象。")这意味着它们通常只是其他东西的轻量级句柄(例如,指向容器中元素或节点的指针),因此没有理由不要求它们可以默认构造(即使默认构造创建在分配新值之前不能用于任何事情的奇异迭

c++ - 为什么迭代器需要默认构造

forward、bidirectional和randomaccess类别的迭代器需要默认可构造。为什么会这样,为什么input和output运算符不必是默认可构造的? 最佳答案 前向迭代器和更强的迭代器需要引用一些外部序列(参见[forward.iterators]/6,其中说“如果a和b都是可解引用的,那么a==b当且仅当*a和*b绑定(bind)到同一个对象。")这意味着它们通常只是其他东西的轻量级句柄(例如,指向容器中元素或节点的指针),因此没有理由不要求它们可以默认构造(即使默认构造创建在分配新值之前不能用于任何事情的奇异迭

c++ - 如何使用 BOOST_FOREACH 同时迭代两个 vector ?

我想用BOOSTFOREACH复制以下内容std::vector::const_iteratori1;std::vector::const_iteratori2;for(i1=v1.begin(),i2=v2.begin();i1 最佳答案 同时迭代两个东西称为“zip”(来自函数式编程),Boosthasazipiterator:Thezipiteratorprovidestheabilitytoparallel-iterateoverseveralcontrolledsequencessimultaneously.Azipite

c++ - 如何使用 BOOST_FOREACH 同时迭代两个 vector ?

我想用BOOSTFOREACH复制以下内容std::vector::const_iteratori1;std::vector::const_iteratori2;for(i1=v1.begin(),i2=v2.begin();i1 最佳答案 同时迭代两个东西称为“zip”(来自函数式编程),Boosthasazipiterator:Thezipiteratorprovidestheabilitytoparallel-iterateoverseveralcontrolledsequencessimultaneously.Azipite

c++ - 为什么 c++ std::max_element 这么慢?

我需要找到vector中的最大元素,所以我使用std::max_element,但是我发现它是一个非常慢的函数,所以我编写了自己的版本并管理为了获得x3更好的性能,这里是代码:#include#include#include#include#includedoublegetRealTime(){structtimevaltv;gettimeofday(&tv,0);return(double)tv.tv_sec+1.0e-6*(double)tv.tv_usec;}inlineintmy_max_element(conststd::vector&vec,intsize){autoit=

c++ - 为什么 c++ std::max_element 这么慢?

我需要找到vector中的最大元素,所以我使用std::max_element,但是我发现它是一个非常慢的函数,所以我编写了自己的版本并管理为了获得x3更好的性能,这里是代码:#include#include#include#include#includedoublegetRealTime(){structtimevaltv;gettimeofday(&tv,0);return(double)tv.tv_sec+1.0e-6*(double)tv.tv_usec;}inlineintmy_max_element(conststd::vector&vec,intsize){autoit=

c++ - std::map 中的最后一个键

我正在寻找std::map的最高键值(由比较运算符定义)。这能保证吗map.rbegin()->first?(我对反向迭代器有点犹豫,std::map的实现有多大的自由度)如果没有,请告知。我无法更改数据结构。 最佳答案 是的。Map是一个排序容器,反向迭代器必须以它们的键的反向(即递减)顺序返回元素。[编辑:正如查尔斯·贝利在他的回答中指出的那样,您的代码给出了最大的key如果它存在-即如果map非空] 关于c++-std::map中的最后一个键,我们在StackOverflow上找到

c++ - std::map 中的最后一个键

我正在寻找std::map的最高键值(由比较运算符定义)。这能保证吗map.rbegin()->first?(我对反向迭代器有点犹豫,std::map的实现有多大的自由度)如果没有,请告知。我无法更改数据结构。 最佳答案 是的。Map是一个排序容器,反向迭代器必须以它们的键的反向(即递减)顺序返回元素。[编辑:正如查尔斯·贝利在他的回答中指出的那样,您的代码给出了最大的key如果它存在-即如果map非空] 关于c++-std::map中的最后一个键,我们在StackOverflow上找到