STLalgorithm在C ++中是非常有用的。 但是有一件令我厌恶的事情是他们似乎缺乏组合性。 例如,假设我有一个vector<pair<int, int>>并且想要将其转换为仅包含对的second成员的vector<int> 。 这很简单: std::vector<std::pair<int, int>> values = GetValues(); std::vector<int> result; std::transform(values.begin(), values.end(), std::back_inserter(result), [] (std::pair<int, int> p) { return p.second; }); 或者,也许我想过滤只有那些first成员是偶数的vector 。 也很简单: std::vector<std::pair<int, int>> values = GetValues(); std::vector<std::pair<int, int>> result; std::copy_if(values.begin(), values.end(), std::back_inserter(result), [] (std::pair<int, int> p) { return (p.first % 2) == 0; }); 但是如果我想要这样做呢? 没有transform_ifalgorithm,使用transform和copy_if似乎需要分配一个临时vector来保存中间结果: std::vector<std::pair<int, int>> […]
根据std :: shufle上的cppreference.com参考站点,以下方法在c ++ 14中被弃用: template< class RandomIt > void random_shuffle( RandomIt first, RandomIt last ); 为什么我们不能不通过第三个参数来调用下面的函数呢? std::random_shuffle(v.begin(),v.end()); //no longer valid in c++14 它看起来不像一个不同的function减速有一个默认的参数设置。 这背后的原因是什么? 有没有添加一些替代品?
一个用例想要做一个复制(1.可以copy_if),但是从一个容器的值到一个指向这些值的指针容器(2.可以transform )。 使用可用的工具,我不能在两个步骤内完成: #include <vector> #include <algorithm> using namespace std; struct ha { int i; explicit ha(int a) : i(a) {} }; int main() { vector<ha> v{ ha{1}, ha{7}, ha{1} }; // initial vector // GOAL : make a vector of pointers to elements with i < 2 vector<ha*> ph; // target vector vector<ha*> pv; […]
我一直在试图find在C ++中的两个std :: set之间的交集,但我不断收到错误。 我为此创build了一个小样本testing #include <iostream> #include <vector> #include <algorithm> #include <set> using namespace std; int main() { set<int> s1; set<int> s2; s1.insert(1); s1.insert(2); s1.insert(3); s1.insert(4); s2.insert(1); s2.insert(6); s2.insert(3); s2.insert(0); set_intersection(s1.begin(),s1.end(),s2.begin(),s2.end()); return 0; } 后面的程序不会生成任何输出,但是我希望有一个新的集合(让我们称之为s3 )和下面的值: s3 = [ 1 , 3 ] 相反,我得到的错误: test.cpp: In function 'int main()': test.cpp:19: error: no matching function […]
我很好奇如何std:next_permutation被实现,所以我提取了gnu libstdc++ 4.7版本,并消毒标识符和格式,以产生以下演示… #include <vector> #include <iostream> #include <algorithm> using namespace std; template<typename It> bool next_permutation(It begin, It end) { if (begin == end) return false; It i = begin; ++i; if (i == end) return false; i = end; –i; while (true) { It j = i; –i; if (*i < *j) { It […]
我一直想知道为什么你不能使用本地定义的类作为STLalgorithm的谓词。 在这个问题: 接近STLalgorithm,lambda,本地类和其他方法 ,BubbaT提到说:“ 由于C ++标准禁止本地types作为参数 ” 示例代码: int main() { int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; std::vector<int> v( array, array+10 ); struct even : public std::unary_function<int,bool> { bool operator()( int x ) { return !( x % 2 ); } }; std::remove_if( v.begin(), v.end(), even() […]