是否必须有一个函数作为模板来传递向量作为参数,如下面的代码所示?
另外,在论证中为什么我们需要传递
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++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);
}