我有一个函数,当前接受2个 vector ,这些 vector 可以包含任何简单的旧数据...

template <class T>
void addData(const vector<T>& yData, vector<T> xData)
{ .. }

问题:
  • 如果这些容器采用不同数量的模板参数,是否可以将其修改为采用两个std::array或两个std::vector或什至二者的组合?
  • 最佳答案

    为什么不仅仅使用它,它可以与使用随机访问迭代器的任何容器一起使用,包括普通的旧数组。如果可以使用迭代代替索引,那么也可以消除随机访问的要求。

    template <typename Cnt1, typename Cnt2>
    void addData(const Cnt1& yData, Cnt2 xData) // is pass-by-value intended?
    {
        using std::begin;
        using std::end;
        typedef decltype(*begin(yData)) T;
        const auto sizeY = end(yData) - begin(yData);
        const auto sizeX = end(xData) - begin(xData);
        // ...
    }
    

    C++ 03版本(不支持普通的旧数组):
    template <typename Cnt1, typename Cnt2>
    void addData(const Cnt1& yData, Cnt2 xData) // is pass-by-value intended?
    {
        typedef Cnt1::value_type T;
        const size_t sizeY = yData.end() - yData.begin();
        const size_t sizeX = xData.end() - xData.begin();
        // ...
    }
    

    09-25 16:20