gpt4 book ai didi

c++ - 使用模板在 vector 和数组之间交替

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:13:12 25 4
gpt4 key购买 nike

假设我有一个打印一组数字的函数:1, 2, 3, 4, 5 并且这些数字可以存储为数组或 vector 。因此,在我当前的系统中,我有两个函数可以接受这些参数中的任何一个。

void printNumbers(std::vector<double> &printNumbers)
{
//code
//....
}

因此接受一个数组..

void printNumbers(int* numbers)
{
//code
//...
}

这似乎是一种代码浪费,而且,我认为我可以更好地利用代码重用,这让我开始思考:我可以使用模板来确定将哪种类型的输入传递给函数吗?例如,它是 vector 还是 array 还是只是一个整数值?

这是下面的原型(prototype):

#include <iostream>

using namespace std;

template<class T>
void printNumbers(T numbers)
{
// code
// code
}

int main(int argc, char *argv[]) {
int numbers[] = {1, 2, 3, 4, 5};
printNumbers<array> (numbers);
}

如有任何帮助,我们将不胜感激。

最佳答案

通常的习惯用法是传递迭代器,一个用于范围的第一个元素,一个对应于“结束后的一个”:

template<class Iterator>
void printNumbers(Iterator begin, Iterator end)
{
for (Iterator i = begin; i != end; ++i)
std::cout << *i << " ";
std::cout << "\n";
}

int main()
{
int numbers[] = {1, 2, 3, 4, 5};
printNumbers(numbers, numbers + 5);
printNumbers(std::begin(numbers), std::end(numbers); // C++11 version
std::vector<int> v{1,2,3,4,5};
printNumbers(v.begin(), v.end());
}

关于c++ - 使用模板在 vector 和数组之间交替,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16692151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com