非变易算法
C++ STL 的非变易算法(Non-mutating algorithm)是一组不破坏操作数据的模板函数,用来对序列数据进行逐个处理、元素查找、子序列搜索、统计和匹配。作为算法函数参数的迭代器,一般为 Input Iterator 输入迭代器,具有 "++" 迭代和 "*" 访问操作。通过迭代器的元素遍历,可对迭代器区间所界定的元素进行操作。因此,非变易算法具有极为广泛的适用性,基本上可应用于各种容器。
目录:
逐个容器元素 for_each
1 /* 下面的示例程序将 list 链表容器的元素,调用 for_each 算法函数,通过 print 函数对象,将各个链表的元素乘以3后打印,并输出元素个数 2 */ 3 -------------------------------------------------------- 应用 for_each 算法遍历 list 容器 4 #include// 这个头文件很重要的哦 5 #include 6 #include
7 using namespace std; 8 9 struct print10 {11 int count; // 打印的元素计数12 print(){count=0;}13 void operator() (int x)14 {15 cout << 3*x << endl;16 count++;17 }18 };19 20 int main()21 {22 // 双向链表初始化23 list lInt;24 lInt.push_back(29);25 lInt.push_back(32);26 lInt.push_back(16);27 lInt.push_back(22);28 lInt.push_back(28);29 lInt.push_back(27);30 31 // 打印链表的元素32 print p = for_each(lInt.begin(), lInt.end(), print());33 // 打印的元素个数34 cout <<"元素个数为:"< << endl;35 36 return 0;37 }
查找容器元素 find
1 /* 下面示例程序利用 find 算法函数查找 list 链表中第一个值为 14 的元素 2 */ 3 -------------------------------------------------------- 应用 find 算法查找 list 容器的元素 4 #include5 #include 6 #include
7 using namespace std; 8 int main() 9 {10 // 双向链表初始化11 list lInt;12 lInt.push_back(100);13 lInt.push_back(10);14 lInt.push_back(14);15 lInt.push_back(13);16 lInt.push_back(14);17 lInt.push_back(40);18 19 // 查找元素 1420 list ::iterator iLocation = find(lInt.begin(), lInt.end(), 14);21 if (iLocation != lInt.end())22 cout << "找到元素14 " << endl;23 24 // 打印第一个14元素前面的那个元素。即打印元素 1025 cout << "前一个元素为:" << *(--iLocation) << endl;26 27 return 0;28 }
条件查找容器元素 find_if ::iterator iLocation;22 iLocation = find_if(vInt.begin(), vInt.end(), divby5);23 24 if (iLocation != vInt.end())25 cout << "找到第一个能被5整除的元素:"26 << *iLocation << endl // 打印1527 << "元素的索引位置为:"28 << iLocation-vInt.begin() << endl; // 打印229 30 return 0;31 }
1 /* 下面示例程序使用 find_if 算法在 vector 向量容器上查找首个可被5整除的元素,程序输出为“找到第一个能被5整除的元素15,元素的索引位置为2” 2 */ 3 -------------------------------------------------------- 应用 find_if 算法条件查找 vector 容器的元素 4 #include5 #include 6 #include 7 using namespace std; 8 9 // 谓词判断函数 divby510 bool divby5(int x)11 {12 return x%5 ? 0 : 1;13 }14 15 int main()16 {17 vector vInt(20); // 可以参考之前对 vector 的介绍18 for (unsigned int i=0; i