草庐IT

Iterator

全部标签

c++ - std::vector::swap 是否使迭代器无效?

如果我交换两个vector,它们的迭代器会保持有效,现在只是指向“其他”容器,还是迭代器会失效?也就是说,给定:usingnamespacestd;vectorx(42,42);vectory;vector::iteratora=x.begin();vector::iteratorb=x.end();x.swap(y);//aandbstillvalid?Pointingtoxory?std似乎对此只字未提:[n3092-23.3.6.2]voidswap(vector&x);Effects:Exchangesthecontentsandcapacity()of*thiswiththa

c++ - std::vector::swap 是否使迭代器无效?

如果我交换两个vector,它们的迭代器会保持有效,现在只是指向“其他”容器,还是迭代器会失效?也就是说,给定:usingnamespacestd;vectorx(42,42);vectory;vector::iteratora=x.begin();vector::iteratorb=x.end();x.swap(y);//aandbstillvalid?Pointingtoxory?std似乎对此只字未提:[n3092-23.3.6.2]voidswap(vector&x);Effects:Exchangesthecontentsandcapacity()of*thiswiththa

C++ 迭代器被认为是有害的?

在今天的Boost库session上,AndreiAlexandrescu,《现代C++设计和LokiC++库》一书的作者,就迭代器不好的原因发表了题为“迭代器必须走”(video,slides)的演讲,他有一个更好的解决方案。我尝试阅读演示幻灯片,但无法从中获得太多信息。迭代器不好吗?他的替代者真的更好吗?C++实现者会采纳他的想法吗? 最佳答案 首先,回答您的问题:没有。事实上,我争论elsewhere迭代器是计算机科学中最重要/最基本的概念。我(不像安德烈)也认为迭代器是直观的。是的,当然可以,但这不足为奇。嗯。看Boost.

C++ 迭代器被认为是有害的?

在今天的Boost库session上,AndreiAlexandrescu,《现代C++设计和LokiC++库》一书的作者,就迭代器不好的原因发表了题为“迭代器必须走”(video,slides)的演讲,他有一个更好的解决方案。我尝试阅读演示幻灯片,但无法从中获得太多信息。迭代器不好吗?他的替代者真的更好吗?C++实现者会采纳他的想法吗? 最佳答案 首先,回答您的问题:没有。事实上,我争论elsewhere迭代器是计算机科学中最重要/最基本的概念。我(不像安德烈)也认为迭代器是直观的。是的,当然可以,但这不足为奇。嗯。看Boost.

c++ - 结束迭代器递减的可移植性如何?

刚刚在我的公司源代码中遇到了end()迭代器的减量,这对我来说看起来很奇怪。据我记得,这适用于某些平台,但不适用于其他平台。也许我错了,但是我在标准中找不到任何有用的东西。标准只说end()返回一个迭代器,它是过去的值,但它保证是可递减的吗?这样的代码如何符合标准?std::list::iteratorit=--l.end();提前致谢。 最佳答案 我认为这是相关条款:ISO/IEC14882:2003C++Standard23.1.1/12–SequencesTable68listssequenceoperationsthatar

c++ - 结束迭代器递减的可移植性如何?

刚刚在我的公司源代码中遇到了end()迭代器的减量,这对我来说看起来很奇怪。据我记得,这适用于某些平台,但不适用于其他平台。也许我错了,但是我在标准中找不到任何有用的东西。标准只说end()返回一个迭代器,它是过去的值,但它保证是可递减的吗?这样的代码如何符合标准?std::list::iteratorit=--l.end();提前致谢。 最佳答案 我认为这是相关条款:ISO/IEC14882:2003C++Standard23.1.1/12–SequencesTable68listssequenceoperationsthatar

c++ - 如何使用 auto 获得 const_iterator?

第一个问题:是否可以“强制”const_iterator使用汽车?例如:std::mapusa;//...initusaautocity_it=usa.find("NewYork");我只想查询,而不是更改city_it所指向的任何内容,所以我想要city_it成为map::const_iterator.但是通过使用自动,city_it与map::find()的返回类型相同,即map::iterator.有什么建议吗? 最佳答案 抱歉,但我认为最好的建议是不完全不使用auto,因为您想要执行(隐式有效的)类型转换。auto用于推断e

c++ - 如何使用 auto 获得 const_iterator?

第一个问题:是否可以“强制”const_iterator使用汽车?例如:std::mapusa;//...initusaautocity_it=usa.find("NewYork");我只想查询,而不是更改city_it所指向的任何内容,所以我想要city_it成为map::const_iterator.但是通过使用自动,city_it与map::find()的返回类型相同,即map::iterator.有什么建议吗? 最佳答案 抱歉,但我认为最好的建议是不完全不使用auto,因为您想要执行(隐式有效的)类型转换。auto用于推断e

c++ - 为什么 std::begin 和 std::end "not memory safe"?

在thisblogpost,EricNiebler指出:Whatiswrongwithstd::beginandstd::end?Surprise!theyarenotmemorysafe.Considerwhatthiscodedoes:externstd::vectorget_data();autoit=std::begin(get_data());inti=*it;//BOOMstd::beginhastwooverloadsforconstandnon-constlvalues.Troubleis,rvaluesbindtoconstlvaluereferences,leadi

c++ - 为什么 std::begin 和 std::end "not memory safe"?

在thisblogpost,EricNiebler指出:Whatiswrongwithstd::beginandstd::end?Surprise!theyarenotmemorysafe.Considerwhatthiscodedoes:externstd::vectorget_data();autoit=std::begin(get_data());inti=*it;//BOOMstd::beginhastwooverloadsforconstandnon-constlvalues.Troubleis,rvaluesbindtoconstlvaluereferences,leadi