情况1:
根据生成路径,查找是否成功生成静态库/动态库,一般在./bin文件中。
情况2:
是否在CMakeLists中target_link_libraries中添加链接静态库操作
情况3:
是都存在类模板,需要实例化,接口函数,这种情况很隐蔽,一般不容易想到。
情况4:
是否需要添加相关的头文件
情况5:
是否添加多余的头文件 ,导致头文件循环引用的问题,这种情况很隐蔽,一般不容易想到。
情况6:
没有成功生成静态库或者静态库,这种情况下查找是否缺少依赖,是否程序缺少头文件,是否是程序写的有问题,不一而论。
std::min_element
用于寻找范围 [first, last) 中的最小元素。
前2个参数指定容器的范围,第3个参数是比较函数,为可选参数。
返回值为指向范围 [first, last) 中最小元素的迭代器。
若范围中有多个元素等价于最小元素,则返回指向首个这种元素的迭代器。若范围为空则返回 last 。
关于比较函数, 默认是用 operator< 比较元素, 也可以自定义比较函数。
所以std::min_element
两种函数签名如下:
template< class ForwardIt > constexpr ForwardIt min_element( ForwardIt first, ForwardIt last );
template< class ForwardIt, class Compare > constexpr ForwardIt min_element( ForwardIt first, ForwardIt last, Compare comp );
std::max_element
与std::min_element
类似,只是用于寻找最大的元素。
#include <algorithm>
#include <iostream> #include <vector> #include <algorithm> int main(int argc, char **argv) { std::vector<int> v{3, 1, 4, 1, 5, 9}; //auto minElement = std::min_element(v.begin(), v.end()); std::vector<int>::iterator minElement = std::min_element(v.begin(), v.end()); std::cout << "min element: " << *(minElement) << std::endl; std::cout << "min element at:" << std::distance(v.begin(), minElement) << std::endl; return 0; }
结果如下:
min element: 1 min element at:1
比如如下自定义比较函数,把求最小指编程求最大值
#include <iostream> #include <vector> #include <algorithm> int main(int argc, char **argv) { std::vector<int> v{3, 1, 4, 1, 5, 9}; auto comp = [](int i, int j){ return i>j;}; // i<j : min; i>j : max std::vector<int>::iterator maxElement = std::min_element(v.begin(), v.end(), comp); std::cout << "max element: " << *(maxElement) << std::endl; std::cout << "max element at:" << std::distance(v.begin(), maxElement) << std::endl; return 0; }
结果如下:
max element: 9 max element at:5
std::min
一般用于求 a 与 b 的较小者 或者求 initializer_list ilist 中值的最小者。
std::min_element
是求一个范围内的最小者的迭代器。范围可以是全部容器,也可以是容器的一个子区间。
所以它们的适用范围和返回值不一样。
https://zh.cppreference.com/w/cpp/algorithm/min_element
http://www.cplusplus.com/reference/algorithm/min_element/
https://zh.cppreference.com/w/cpp/algorithm/min