草庐IT

Iterator

全部标签

c++ - 尾随返回类型、decltype 和 const-ness

我只是在尝试新的尾随返回类型,但我遇到了这个(简化的)代码的问题#includeclassMyContainer{std::listints;autobegin()->decltype(ints.begin()){returnints.begin();}autobegin()const->decltype(ints.begin()){returnints.begin();}};忽略这段代码毫无意义的事实。重要的部分是使用GCC4.6.1时产生的编译器错误(带有-std=c++0x标志):Inmemberfunction'std::list::iteratorMyContainer::b

c++ - 尾随返回类型、decltype 和 const-ness

我只是在尝试新的尾随返回类型,但我遇到了这个(简化的)代码的问题#includeclassMyContainer{std::listints;autobegin()->decltype(ints.begin()){returnints.begin();}autobegin()const->decltype(ints.begin()){returnints.begin();}};忽略这段代码毫无意义的事实。重要的部分是使用GCC4.6.1时产生的编译器错误(带有-std=c++0x标志):Inmemberfunction'std::list::iteratorMyContainer::b

c++ - std::begin 和 std::end 的 const 重载的目的是什么?

对于std::begin,我们有两个容器重载:templateautobegin(C&c)->decltype(c.begin());templateautobegin(constC&c)->decltype(c.begin());但是C的常量可以通过通常的模板推导规则来推导,所以看起来第二个重载是多余的。我错过了什么? 最佳答案 在右值上调用begin(和end,就此而言)是合理的,前提是我们在容器被销毁后不使用生成的迭代器。但是,将右值传递给T&形式的参数将不起作用,这是第二个重载发挥作用的地方。但是,很可能我们正在处理对前ra

c++ - std::begin 和 std::end 的 const 重载的目的是什么?

对于std::begin,我们有两个容器重载:templateautobegin(C&c)->decltype(c.begin());templateautobegin(constC&c)->decltype(c.begin());但是C的常量可以通过通常的模板推导规则来推导,所以看起来第二个重载是多余的。我错过了什么? 最佳答案 在右值上调用begin(和end,就此而言)是合理的,前提是我们在容器被销毁后不使用生成的迭代器。但是,将右值传递给T&形式的参数将不起作用,这是第二个重载发挥作用的地方。但是,很可能我们正在处理对前ra

c++ - 在数组上使用迭代器

在C++Primer中有说明那个InC++pointersandarraysarecloselyintertwined.Inparticular,aswe’llsee,whenweuseanarray,thecompilerordinarilyconvertsthearraytoapointer.我想使用迭代器来打印数组。下面的程序运行良好,但是当我尝试打印arr2或arr3时,如果我没记错的话,它的类型是int*,我收到一个错误(判断&运算符表示下面的引用)。error:nomatchingfunctionforcallto‘begin(int*&)’intmain(intargc,

c++ - 在数组上使用迭代器

在C++Primer中有说明那个InC++pointersandarraysarecloselyintertwined.Inparticular,aswe’llsee,whenweuseanarray,thecompilerordinarilyconvertsthearraytoapointer.我想使用迭代器来打印数组。下面的程序运行良好,但是当我尝试打印arr2或arr3时,如果我没记错的话,它的类型是int*,我收到一个错误(判断&运算符表示下面的引用)。error:nomatchingfunctionforcallto‘begin(int*&)’intmain(intargc,

c++ - STL 算法将整个容器而不是 .begin(), end() 作为 arg?

这个问题在这里已经有了答案:Whydon'tstd::algorithmsworkdirectlyoncontainersaswell?(3个回答)关闭1年前。独立的STL算法(如std::count_if)采用一对迭代器。在我使用这些的所有情况下(以及我在网上看到的所有示例!),我发现自己在输入std::count_if(myContainer.begin(),myContainer.end(),/*...*/);样式的速记模板有什么原因吗std::count_if(myContainer,/*...*/);没有提供,因为更多的是对整个容器执行的操作?我只是忽略了吗?c++11和c+

c++ - STL 算法将整个容器而不是 .begin(), end() 作为 arg?

这个问题在这里已经有了答案:Whydon'tstd::algorithmsworkdirectlyoncontainersaswell?(3个回答)关闭1年前。独立的STL算法(如std::count_if)采用一对迭代器。在我使用这些的所有情况下(以及我在网上看到的所有示例!),我发现自己在输入std::count_if(myContainer.begin(),myContainer.end(),/*...*/);样式的速记模板有什么原因吗std::count_if(myContainer,/*...*/);没有提供,因为更多的是对整个容器执行的操作?我只是忽略了吗?c++11和c+

c++ - C++中的多态迭代器

我正在尝试在C++中实现多态迭代器。基本上,我需要它才能应用过滤器,以便迭代器根据相关条件跳过一些项目。所以我做了一个GoF-like具有抽象接口(interface)的迭代器,这允许我从中派生过滤迭代器并实现所需的逻辑。我也更喜欢基于接口(interface)的迭代器而不是模板迭代器,因为它们允许隐藏实现而不会导致困惑的鸭子类型模板。但是,多态迭代器不能按值返回(与STL迭代器相反),所以我必须传递指针,这很容易变得危险,就像在这种情况下一样,这看起来合乎逻辑但会导致内存泄漏:Iter*Collection::GetIter(){...}//newIterImplDoSomethin

c++ - C++中的多态迭代器

我正在尝试在C++中实现多态迭代器。基本上,我需要它才能应用过滤器,以便迭代器根据相关条件跳过一些项目。所以我做了一个GoF-like具有抽象接口(interface)的迭代器,这允许我从中派生过滤迭代器并实现所需的逻辑。我也更喜欢基于接口(interface)的迭代器而不是模板迭代器,因为它们允许隐藏实现而不会导致困惑的鸭子类型模板。但是,多态迭代器不能按值返回(与STL迭代器相反),所以我必须传递指针,这很容易变得危险,就像在这种情况下一样,这看起来合乎逻辑但会导致内存泄漏:Iter*Collection::GetIter(){...}//newIterImplDoSomethin