草庐IT

iter_swap

全部标签

C++ 中 <iterator> <functional> <numeric> 库好用的函数

C++中库好用的函数泰裤辣!简述:迭代器省代码用的。std::advance记忆方法:advance-前进。形如:advance(it,step),表示it迭代器自增step步。实现类似于:functionadvance(&it,n): whilen>0: --n ++it whilen或functionadvance(&it,n): it+=nstd::next&std::prev记忆方法:自己问英语老师。形如next(it,n)及prev(it,n),默认n=1,表示迭代器前移、后移n位。为std::advance的变体,区别在于返回了迭代器而传入迭代器不改变。实现类似于:functi

c++ - 为什么 range-for 找不到我对 std::istream_iterator 的开始和结束重载?

我有这样的代码std::ifstreamfile(filename,std::ios_base::in);if(file.good()){file.imbue(std::locale(std::locale(),newdelimeter_tokens()));for(auto&entry:std::istream_iterator(file)){std::cout哪里std::istream_iterator的begin()和end()定义如下templatestd::istream_iteratorbegin(std::istream_iterator&stream){returns

c++ - '_ITERATOR_DEBUG_LEVEL' : value '0' doesn't match value '2' 检测到不匹配

使用VS2010构建时,我正在构建一个导致许多此类链接错误的库:errorLNK2038:mismatchdetectedfor'_ITERATOR_DEBUG_LEVEL':value'0'doesn'tmatchvalue'2'导致我必须同时发布我的库的发行版和调试版。我没有理由发布lib的调试版本,它只会使二进制分发版膨胀。但是在调试中构建的客户端代码拒绝链接到我的发布库。我以前见过这个问题,但他们似乎没有问正确的问题。我明白这个错误是什么,以及为什么我会得到它(好吧,有点;我不确定到底是什么发出了依赖性。你呢?),但我想知道的是如何消除这种依赖性的发生在我的库中?类似于在使用冲

c++ - 从 std::istreambuf_iterator 创建 std::string,奇怪的语法怪癖

我在某处发现了以下用于将文件读入字符串的习语:std::ifstreamfile("path/to/some/file.ext");std::stringcontents(std::istreambuf_iterator(file),(std::istreambuf_iterator()));它现在工作得很好。但是,如果我删除第二个迭代器参数周围的括号,即:std::stringcontents(std::istreambuf_iterator(file),std::istreambuf_iterator());一旦我尝试在字符串对象上调用任何方法,例如:constchar*buffe

c++ - 为什么 ostream_iterator 没有按预期工作?

下面的代码就不用多说了:#include#include#include#includeusingnamespacestd;typedefpairPAIR;ostream&operatorcoll;cout(cout));} 最佳答案 问题是名称查找没有找到您的operator.尝试调用operator的代码在ostream_iterator里面的某个地方它本身在std中命名空间。名称查找在ostream_iterator中四处寻找正确的函数和std命名空间;参数依赖查找在这里没有帮助,因为两个参数都在std中命名空间也是如此。因此

c++ - copy-and-swap 习语的低效率?

我正在测试一些代码,其中类中有一个std::vector数据成员。该类既可复制又可移动,operator=的实现方式如here所述。使用copy-and-swap习语。如果有两个vector,比如v1大容量,v2小容量,v2被复制到v1(v1=v2),赋值后保留v1中的大容量;这是有道理的,因为接下来的v1.push_back()调用不必强制进行新的重新分配(换句话说:释放已经可用的内存,然后重新分配它以增加vector没有多大意义).但是,如果对以vector为数据成员的类进行相同的赋值,则行为不同,并且在赋值之后更大的容量是不保留。如果copy-and-swap惯用语不被使用,复制

c++ - 对 'std::istreambuf_iterator' 的用法感到困惑

以下是anexamplefromcppreference.com,TheCodeis:#include#include#include#includeintmain(){//typicalusecase:aninputstreamrepresentedasapairofiteratorsstd::istringstreamin("Hello,world");std::vectorv((std::istreambuf_iterator(in)),std::istreambuf_iterator());std::couti1(s),i2(s);std::cout我有两个问题:有人可以详细说

c++ - 我们可以存储 unordered_map<T>::iterator 吗?

引用http://www.careercup.com/question?id=17188673来自chetan.j9voidInsert(strings){if(IsElementPresent(s))return;myMap[s]=myMapVector.size();unordered_map::iteratorit=myMap.find(s);myMapVector.push_back(it);}问题>我们可以存储unordered_map的迭代器供以后检索吗?根据我的理解,插入或删除元素后迭代器将失效。谢谢 最佳答案 @sy

c++ - 重用 copy-and-swap 习惯用法

我正在尝试将copy-and-swap习惯用法放入可重用的混音中:templatestructcopy_and_swap{Derived&operator=(Derivedcopy){Derived*derived=static_cast(this);derived->swap(copy);return*derived;}};我打算通过CRTP将其混入:structFoo:copy_and_swap{Foo(){std::cout然而,一个简单的测试表明它不起作用:Foox;Fooy;x=y;这只会打印两次“default”,既不会打印“copy”也不会打印“swap”。我在这里缺少什

c++ - boost::filter_iterator——我将如何使用 STL 做到这一点?

我收到了一个迭代器,我必须将它传递给另一个函数——但经过过滤以便跳过某些元素(这是一个指针范围,我想过滤掉NULL指针)。我在谷歌上搜索了“STLfilteriterator”以查看如何执行此操作,并且boost::filter_iterator上来了。这看起来不错,我可以使用它,但我也可以使用良好的旧STL来实现吗?当然,无需将元素复制到新容器中。我想我必须创建另一个迭代器类来提供必要的begin()、end()等函数并进行过滤?所以我必须重新实现boostiterator_filter...? 最佳答案 你是对的;您实际上是在自