草庐IT

iter_swap

全部标签

c++ - "using std::swap"如何启用ADL?

在Whatisthecopy-and-swapidiom示例如下:friendvoidswap(dumb_array&first,dumb_array&second)//nothrow{//enableADL(notnecessaryinourcase,butgoodpractice)usingstd::swap;//byswappingthemembersoftwoclasses,//thetwoclassesareeffectivelyswappedswap(first.mSize,second.mSize);swap(first.mArray,second.mArray);}us

C++ STL : list with Pointers - Iterator cannot access?

我正在为一个包含我的“对象”对象指针的STL列表而苦苦挣扎。我声明:listobjectlist;并通过以下方式插入:this->objectlist.push_back(newObject(address,value,profit));并尝试像在map和其他中一样进行迭代:list::iteratoriter;iter=this->objectlist.begin();while(iter!=this->objectlist.end()){iter->print();}其中print()是Object类的公共(public)方法;这里有什么问题?我无法通过迭代器访问列表中的对象?

C++ STL : list with Pointers - Iterator cannot access?

我正在为一个包含我的“对象”对象指针的STL列表而苦苦挣扎。我声明:listobjectlist;并通过以下方式插入:this->objectlist.push_back(newObject(address,value,profit));并尝试像在map和其他中一样进行迭代:list::iteratoriter;iter=this->objectlist.begin();while(iter!=this->objectlist.end()){iter->print();}其中print()是Object类的公共(public)方法;这里有什么问题?我无法通过迭代器访问列表中的对象?

c++ - swap() 会导致未定义的行为吗?

我试图从[C++11:utility.swap]中了解std::swap的条件。模板定义为templatevoidswap(T&,T&)(加上一些noexcept细节)并具有“交换存储在两个位置的值”的效果。以下程序是否定义明确?#includeintmain(){intm,n;std::swap(m,n);}如果我自己编写交换代码(即inttmp=m;m=n;n=tmp;),它将具有未定义的行为,因为它会尝试左值到右值的转换一个未初始化的对象。但是标准的std::swap函数似乎没有附加任何条件,也不能从规范中得出存在任何左值到右值和因此UB的规范。标准是否要求std::swap对未

c++ - swap() 会导致未定义的行为吗?

我试图从[C++11:utility.swap]中了解std::swap的条件。模板定义为templatevoidswap(T&,T&)(加上一些noexcept细节)并具有“交换存储在两个位置的值”的效果。以下程序是否定义明确?#includeintmain(){intm,n;std::swap(m,n);}如果我自己编写交换代码(即inttmp=m;m=n;n=tmp;),它将具有未定义的行为,因为它会尝试左值到右值的转换一个未初始化的对象。但是标准的std::swap函数似乎没有附加任何条件,也不能从规范中得出存在任何左值到右值和因此UB的规范。标准是否要求std::swap对未

c++ - 如何在具有 copy-and-swap 习语的赋值运算符中使用 noexcept?

移动赋值运算符通常应该声明为noexcept(即将类型存储在STL容器中)。但是copy-and-swap习惯用法允许在单个代码中定义复制和移动赋值运算符。在这种情况下如何处理noexcept说明符?复制构造可以抛出,但我怀疑它是否会违反noexcept说明符。//IsitcorrectconsideringthatTcopyconstructorcanthrow?T&operator=(Tother)noexcept; 最佳答案 由于拷贝是在调用的调用者的方面制作的,因此它不是您的函数所做的一部分。因此它不能由您的函数控制,因此您

c++ - 如何在具有 copy-and-swap 习语的赋值运算符中使用 noexcept?

移动赋值运算符通常应该声明为noexcept(即将类型存储在STL容器中)。但是copy-and-swap习惯用法允许在单个代码中定义复制和移动赋值运算符。在这种情况下如何处理noexcept说明符?复制构造可以抛出,但我怀疑它是否会违反noexcept说明符。//IsitcorrectconsideringthatTcopyconstructorcanthrow?T&operator=(Tother)noexcept; 最佳答案 由于拷贝是在调用的调用者的方面制作的,因此它不是您的函数所做的一部分。因此它不能由您的函数控制,因此您

c++ - std::string::iterator 偏移并返回

我是否可以通过某个成员将迭代器设置为字符串中的第5位,或者我必须执行for(i=0;i?给定一个迭代器,如何将其转换为字符串中的数字偏移量?如果std::iterators无法做到这一点,可以提升吗?迭代器偏移量 最佳答案 CanIsetaniteratortoposition5inastringviasomemember您可以使用std::advancestd::advance(iterator,5);或iterator+=5;GivenanIterator,howcanIconvertthattoanumericoffsetin

c++ - std::string::iterator 偏移并返回

我是否可以通过某个成员将迭代器设置为字符串中的第5位,或者我必须执行for(i=0;i?给定一个迭代器,如何将其转换为字符串中的数字偏移量?如果std::iterators无法做到这一点,可以提升吗?迭代器偏移量 最佳答案 CanIsetaniteratortoposition5inastringviasomemember您可以使用std::advancestd::advance(iterator,5);或iterator+=5;GivenanIterator,howcanIconvertthattoanumericoffsetin

c++ - STL 算法 : Why no additional interface for containers (additional to iterator pairs)?

我想知道为什么STL不会重载它们的算法函数,这样我就可以通过简单地提供一个容器而不是采用更冗长的方式来传递begin+end迭代器来调用它们。我当然理解为什么我们还想使用迭代器对来处理容器/数组的子序列,但是,几乎所有对这些方法的调用都使用了整个容器:std::for_each(myVector.begin(),myVector.end(),doSomething);我会发现只写更方便、可读和可维护std::for_each(myVector,doSomething);STL不提供这些重载是否有原因?[编辑:我的意思不是用这个受限的接口(interface)替换接口(interface