是否必须有一个函数模板来传递 std::vector 作为参数?

问题描述 投票:0回答:2

是否必须有一个函数模板来将

std::vector
作为参数传递,如下面的代码所示?

还有,在参数中,为什么我们需要和

<T>
一起传递
std::vector

template <typename T>
void print_vec(const std::vector<T>& vec){
    for(size_t i{}; i < vec.size();++i){
        std::cout << vec[i] << " ";
    }
    std::cout << std::endl;    
}


int main(){

    //Constructing vectors
    std::vector<std::string> vec_str {"The","sky","is","blue","my","friend"};
    std::cout << "vec1[1]  : " << vec_str[1] << std::endl;
    print_vec(vec_str);
}
c++ std stdvector function-templates
2个回答
3
投票

不,这不是强制性的。作者认为模板

print_vec
比特定于 print_vec
std::vector<std::string>
更有用


2
投票

注意在 C++20 中您可以使用此语法, 它基本上将您的模板限制为任何“可迭代”的内容 它还表明,在范围(向量)的情况下,你确实应该 使用基于范围的 for 循环。 (遗憾的是,大多数 C++ 课程都有些过时了,并且没有向您展示这一点)

#include <vector>
#include <ranges>
#include <iostream>

// Use C++20 template/concept syntax
auto print_all(std::ranges::input_range auto&& values)
{
    for(const auto& value : values)
    {
        std::cout << value << "\n";
    }
}

int main()
{
    std::vector<std::string> values{"1","2","3"};
    print_all(values);
}
© www.soinside.com 2019 - 2024. All rights reserved.