#include <iostream>
#include <algorithm>
#include <vector>

std::vector<std::string> filtered_files(const std::vector<std::string>& files, const std::vector<std::string>& extensions)
{
    std::vector<std::string> re;

    for(const std::string &f : files)
    {
        if (std::find_if(extensions.begin(), extensions.end(),
            [&](const std::string &ex){
                return (f.size() >= ex.size()) && (f.compare(f.size()-ex.size(), ex.size(), ex) == 0);
            }
        ) != extensions.end())
        {
            re.push_back(f);
        }
    }

    return re;
}

int main()
{
    std::vector<std::string> v{"main.cpp","main.c","main.py"};
    std::vector<std::string> re = filtered_files(v,{".c",".cpp"});
    for(const std::string s  :re) {
        std::cout << s << '\n';
    }
    return 0;
}
