草庐IT

back_emplace_iterator

全部标签

c++ - 私有(private)构造函数禁止使用 emplace[_back]() 以避免 move

考虑以下代码:#includeclassA{public:A(A&&);//somewhatexpensivestaticstd::vectormake_As(){std::vectorresult;result.push_back(A(3));result.push_back(A(4));returnresult;}private:A(int);//privateconstructor};自从A的move构造函数有点昂贵(无论出于何种原因),我想避免调用它并使用emplace_back()而是:#includeclassA{public:A(A&&);//somewhatexpens

c++ - std::vector::push_back 的成本是成功还是无效?

如果我理解正确,std::vector::insert不保证std::vector的提交或回滚s(出于明显的原因,它适用于std::lists)在复制或移动期间抛出异常的情况下,因为检查异常的成本很高。我最近看到push_back确实可以保证最后插入成功或什么也没有发生。我的问题如下。假设在push_pack期间必须调整vector的大小(发生重新分配)。在这种情况下,必须通过复制或移动语义将所有元素复制到新容器中。假设移动构造函数不能保证noexcept,那么std::vector将使用复制语义。因此,为了保证push_pack的上述行为,std::vector必须检查复制是否成功,

c++ - 为什么我不能从 iterator_traits 获取 value_type?

我正在这样做:constintarr[]={1,2,3,4,5,6,7,8,9,10,11,12,13};constautofoo=cbegin(arr);consttypenameiterator_traits::value_typebar=1;我会期待bar有类型int.但是我得到了一个错误:errorC2039:value_type:isnotamemberofstd::iterator_traits这是const的问题吗?我需要去掉那个吗? 最佳答案 这里的问题在于行constautofoo=cbegin(arr);cbeg

自己的容器类的 C++ 迭代器和 const_iterator 问题

我正在编写一个自己的容器类,但遇到了一个我无法理解的问题。这是显示问题的简单示例。它由一个容器类和两个测试类组成:一个使用std:vector的测试类可以很好地编译,第二个测试类尝试以完全相同的方式使用我自己的容器类,但编译失败。#include#include#includeusingnamespacestd;templateclassMyContainer{public:classiterator{public:typedefiteratorself_type;inlineiterator(){}};classconst_iterator{public:typedefconst_i

c++ - 二维 vector push_back

我有一个由其他vectorB组成的二维vectorAvector>AvectorB我使用push_back函数来填充B。B.push_back(1);B.push_back(2);B.push_back(3);填充该vector后,我再次使用push_back用B填充AA.push_back(B)这会重复多次,因此A最终会生成一个包含多个其他vector的vector,如下所示:A{{1,2,3},{2,2,2},{8,9,10}}如何调用A中的特定索引,然后继续添加到vector中,以便输出类似于A{{1,2,3},{2,2,2,4,5,6},{8,9,10}}类似A[2].push

c++ - 如何从 STL 数据结构中删除 reverse_iterator?

由于某种原因,以下代码失败。您不能简单地使用它的base()方法删除reverse_iterator。#include#includeintmain(){std::setsetOfInts;setOfInts.insert(1);setOfInts.insert(2);setOfInts.insert(3);std::set::reverse_iteratorrev_iter=setOfInts.rbegin();std::set::reverse_iteratornextRevIter=setOfInts.rbegin();++nextIter;while(rev_iter!=set

c++ - 为什么 vector<> 和 list<> 容器中的 push_back 不返回对插入元素的引用?

我意识到我可以通过调用back()来获取iterator引用,但为什么不使用push_back()来返回它呢?是出于性能原因吗?还是由于异常安全(类似于为什么pop_back()不返回弹出值)?无论哪种情况,请解释一下。 最佳答案 各种insert函数返回一个迭代器的原因很简单:调用者不一定知道如何获取该元素的迭代器。map::insert和set::insert返回一个,否则调用者将不得不搜索元素。当您执行vector::push_back时,您知道插入的元素在哪里。它是--vector.end()。您不必搜索它;总是那个位置。你

C++:push_back(new Object()) 是内存泄漏吗?

以下C++代码是否存在内存泄漏?list.push_back(newString("hi"));据我了解,任何std集合/容器中的push_back总是会制作拷贝。因此,如果复制了新字符串,则没有什么可以删除新字符串,对吧?因为push_back之后没有引用它...我是对还是错?谢谢。Jbu编辑:我想我错了,因为new将返回一个指针......我们将始终拥有能够删除新字符串的指针 最佳答案 是的,但不是你想的那样。取决于如何list已定义并初始化,push_back可能会抛出异常。如果是,则从new返回的指针迷失了,永远无法解脱。但

c++ - boost::asio::ip::tcp::resolver::iterator 是做什么的?

我从C++中的boostasio编程开始,在查看示例时,我无法理解boost::asio::ip::tcp::resolver::iterator是什么做。代码:boost::asio::io_serviceio_service;tcp::resolverresolver(io_service);tcp::resolver::queryquery(argv[1]);tcp::resolver::iteratorendpoint_iterator=resolver.resolve(query);tcp::resolver::iteratorend;tcp::socketsocket(io

c++ - const_iterator 和 const_iterator::value_type 的 constness

为什么在STL中std::iterator_traits::value_type与类型相同std::iterator_traits::value_type为什么要这样设计?第一个不应该是constT,第二个不应该是T吗?您应该如何采用迭代器的底层const正确类型?我知道您可以编写自己的模板类和特化并从中获取它std::iterator_traits::pointer但是不应该有一个成员typedef来保存它吗? 最佳答案 常量对于值类型无关紧要,因为值意味着一个拷贝。std::iterator_traits::reference是