草庐IT

each_pair

全部标签

c++ - 文学编码与。 std::pair,解决方案?

作为大多数程序员,我钦佩并尝试遵循Literate编程的原则,但在C++中,我经常发现自己使用std::pair来完成大量常见任务。但是std::pair是,恕我直言,文学编程的邪恶敌人......我的意思是,当我回到一两天前编写的代码时,我看到了对std::pair的操作(通常作为迭代器),我不禁想知道“iter->first和iter->second是什么意思???".我猜其他人在查看他们的std::pair代码时也会有同样的疑问,所以我想知道,有没有人想出一些好的解决方案来恢复使用时的读写能力std::pair? 最佳答案 s

c++ - 在 for-each 循环中删除 vector 的一些元素而不迭代整个 vector

我有一个vector,我正在搜索其中的一个元素,同时使用for-each循环遍历该vector。如果我在搜索过程中发现任何无效元素,我想将它们从vector中删除。基本上,我想做这样的事情:for(autoel:vec){if(el==whatImLookingFor){returnel;}elseif(isInvalid(el)){vec.erase(el);}}我查看了一些其他问题,例如this和this,但两者都推荐使用std::remove_if。这将遍历整个vector并删除所有无效元素,而不是仅在找到我要查找的元素之前进行迭代,然后忽略之后的任何元素。什么是这样做的好方法?

c++ - 如何初始化 const std::pair?

假设我有一个:#includeusingnamespacestd;typedefpairmy_pair;如何初始化constmy_pair? 最佳答案 使用它的构造函数:constmy_pairp(1,2); 关于c++-如何初始化conststd::pair?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1231788/

c++ - bool 数组上的原始循环比变换或 for_each 快 5 倍

根据我之前对transform和for_each进行基准测试的经验,它们的执行速度通常比原始循环稍快,当然它们也更安全,因此我尝试将所有原始循环替换为transform、generate和for_each。今天,我比较了使用for_each、transform和raw循环翻转bool值的速度,我得到了非常令人惊讶的结果。raw_loop的执行速度比其他两个快5倍。我真的找不到一个很好的理由为什么我们会得到如此巨大的差异?#include#includestaticvoidForEach(benchmark::State&state){std::arraya;std::fill(a.be

c++ - 为什么 std::pair<A,B> 与 std::tuple<A,B> 不同? (真的没有办法吗?)

为什么是std::pair与std::tuple不同?不能只用一个代替另一个总是感觉很奇怪。它们在某种程度上是可转换的,但有一些限制。我知道std::pair需要有两个数据成员Afirst和Bsecond,所以它不能只是std::tuple的类型别名.但我的直觉说我们可以专攻std::tuple,即正好有两个元素的元组,等于标准要求的定义std::pair成为。然后将其别名为std::pair.我想这是不可能的,因为它太简单了以至于没有想到,但是例如在g++的libstdc++中并没有这样做(我没有查看其他库的源代码)。这个定义的问题是什么?是否“只是”会破坏标准库的二进制兼容性?

c++ - std::pair: 过于严格的构造函数?

我偶然发现了新的std::pair的一个令人惊讶的行为。构造函数,它是在C++11中引入的。我在使用std::pair>时发现了这个问题,它发生了,因为std::atomic既不能复制也不能移动。在下面的代码中,我替换了std::atomic与foobar为了简化。以下代码编译良好,使用GCC-4.9和Clang-3.5(有和没有libc++):structfoobar{foobar(int){}//implicitconversion//foobar(constfoobar&)=delete;};std::pairp{1,2};这种行为是预期的。但是,当我删除foobar的复制构造函

c++ - 有没有一种方便的方法可以将 std::pair 包装为新类型?

我经常发现自己使用std::pair将两个相关量的逻辑分组定义为函数参数/返回值。一些示例:行/列、标签/值等。很多时候我真的应该滚动我自己的类(class),而不是仅仅使用std::pair。当事情开始崩溃时很容易看出——当代码中到处都是make_pair时,首先,其次,很难记住什么是什么——std::pair比类型Position传达更少的含义.您发现了将std::pair的功能封装在传达真实含义的类型中的最佳方法是什么?以下是我考虑过的一些事情:typedefstd::pairPosition;这至少在传递类型时为类型提供了一个有意义的名称,但类型不是强制的,它实际上仍然只是一对

c++ - 为什么 `initializer_list<pair>` 和 `initializer_list<tuple>` 的行为不同?

以下代码编译并运行:#include#include#include#includevoidext(std::initializer_list>>myList){//Dosomething}///////////////////////////////////////////////////////////intmain(void){ext({{1.0,{2.0,3.0,4.0}}});return0;}虽然这个没有:#include#include#include#includevoidext(std::initializer_list>>myList){//Dosomething}

c++ - 为什么 std::pair 没有迭代器?

为什么std::pair没有迭代器?std::pair应该提供iterator和const_iterator以及begin()和end()--只针对他们的两个成员。我认为这会很有用,因为这样我们可以将它们传递给期望可迭代的模板函数,例如vector或set。这样做有什么缺点吗? 最佳答案 一个原因是一对中的两个元素可以是不同的类型。这不适合迭代器模型。元组也是如此,拥有迭代器可能会更有吸引力。如果您需要一个固定长度的廉价同质容器,您可以使用std::array. 关于c++-为什么std

c++ - 按字符串对 std::vector<std::pair<std::string,bool>> 进行排序?

我如何通过比较pair.first这是一个std::string来对这个vector进行排序?(不提供静态比较功能,也不使用boost)。 最佳答案 std::vector>v;std::sort(v.begin(),v.end());std::pair过载operator首先按first排序元素然后由second元素。因此,如果您只是对vector进行排序使用默认排序顺序(operator),您将获得所需的顺序。 关于c++-按字符串对std::vector>进行排序?,我们在Stac