MST

星途 面试题库

面试题:C++函数模板类型参数多重约束及性能优化

设计一个C++函数模板,它接受两个类型参数T1和T2。T1必须是一个支持随机访问迭代器的容器类型,T2必须是与容器T1中元素类型相同或可隐式转换为该元素类型。函数功能是在容器T1中查找元素T2,如果找到则返回其索引,否则返回 -1。在实现过程中,要考虑性能优化,尽量避免不必要的内存拷贝和动态内存分配,使用C++20的concepts等特性来实现类型参数的约束。
17.3万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#include <concepts>
#include <iostream>
#include <vector>

template <typename T1, typename T2>
concept RandomAccessContainerWithCompatibleElement =
    std::ranges::random_access_range<T1> &&
    std::convertible_to<T2, std::ranges::range_value_t<T1>>;

template <RandomAccessContainerWithCompatibleElement T1, typename T2>
int findIndex(const T1& container, const T2& target) {
    for (size_t i = 0; i < container.size(); ++i) {
        if (container[i] == target) {
            return static_cast<int>(i);
        }
    }
    return -1;
}

你可以这样使用这个函数模板:

int main() {
    std::vector<int> vec = {10, 20, 30, 40};
    std::cout << findIndex(vec, 30) << std::endl; // 输出2
    std::cout << findIndex(vec, 50) << std::endl; // 输出-1
    return 0;
}