C/C++教程

【C++】LINK类型错误分析记录

本文主要是介绍【C++】LINK类型错误分析记录,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

LINK类型错误

情况1:

根据生成路径,查找是否成功生成静态库/动态库,一般在./bin文件中。

情况2:

是否在CMakeLists中target_link_libraries中添加链接静态库操作

情况3:

是都存在类模板,需要实例化,接口函数,这种情况很隐蔽,一般不容易想到。

情况4:

是否需要添加相关的头文件

情况5:

是否添加多余的头文件 ,导致头文件循环引用的问题,这种情况很隐蔽,一般不容易想到。

情况6:

没有成功生成静态库或者静态库,这种情况下查找是否缺少依赖,是否程序缺少头文件,是否是程序写的有问题,不一而论。

C++ STL min_element 使用说明

说明

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_elementstd::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_element 与 std::min 的区别

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

这篇关于【C++】LINK类型错误分析记录的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!