在 C++ STL 中是否必须有一个模板函数来将向量作为参数传递?

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

是否必须有一个函数作为模板来传递向量作为参数,如下面的代码所示?

另外,在论证中为什么我们需要传递

std::vector

(我学习STL时的基本问题)

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++ stl stdvector
2个回答
3
投票

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

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


1
投票

注意在 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.