C++模板参数siz返回错误结果

C++模板参数siz返回错误结果,c++,templates,sizeof,C++,Templates,Sizeof,这样我就可以找到数组中元素的数量。但是,当我将此int数组作为模板作为参数时,结果计算不正确 int arr[] = {1,2,3,4,5}; int size_arr = sizeof(arr) / sizeof(arr[0]); 我使用类型模板将INT数组作为参数添加到列表中 template <typename listType, typename arrayX> listType addList(listType e , arrayX array) { i

这样我就可以找到数组中元素的数量。但是,当我将此int数组作为模板作为参数时,结果计算不正确

int arr[] = {1,2,3,4,5};
int size_arr  =  sizeof(arr) / sizeof(arr[0]);
我使用类型模板将INT数组作为参数添加到列表中

template <typename listType, typename arrayX>
 listType  addList(listType e , arrayX array)
{
     int        sizeOf = sizeof(array);
     int        sizeOfperOne = sizeof(array[0]);
     int        arrSize =  sizeOf   /   sizeOfperOne        ;
     cout << "Total Byte :  " << sizeOf << "     BytePerUnit : " << sizeOfperOne << " arrSize : " << arrSize<< endl;
     for (int i = 0; i <  arrSize; i++)
    {
        e.push_back(array[i]);
    }
    return e;
}
相信我,我无法通过研究找到解决这个问题的方法


非常感谢你的帮助。

我不认为这是浪费时间。 在Main方法中处理额外的操作

 template <typename listType, typename arrayX>
 listType  InsertList(listType e, arrayX array, int size)
 {

     for (int i = 0; i < size; i++)
     {
         e.push_back(array[i]);
     }
     return e;
 }
主要方法

int main() 
{
    int mlArray[] = { 1,2,3,4,5,6,7,8,9};

    list<int> SecondList;
 
    ThirdList=  InsertList(SecondList, mlArray, size(mlArray));
    print(SecondList, "SecondList : ");

    return 0;
}

我不认为这是浪费时间。 在Main方法中处理额外的操作

 template <typename listType, typename arrayX>
 listType  InsertList(listType e, arrayX array, int size)
 {

     for (int i = 0; i < size; i++)
     {
         e.push_back(array[i]);
     }
     return e;
 }
主要方法

int main() 
{
    int mlArray[] = { 1,2,3,4,5,6,7,8,9};

    list<int> SecondList;
 
    ThirdList=  InsertList(SecondList, mlArray, size(mlArray));
    print(SecondList, "SecondList : ");

    return 0;
}

数组衰减为指针,如果需要模板函数中数组的大小,可以将函数更改为下面的值

template <typename listType, std::size_t N, typename arrayX>
listType  addList(listType e , arrayX (&array)[N] )
{
     int        sizeOf = sizeof(array);
     int        sizeOfperOne = sizeof(array[0]);
     int        arrSize =  N;
     cout << "Total Byte : " << sizeOf
          << "     BytePerUnit : " << sizeOfperOne
          << " arrSize : " << arrSize
          << endl;
     for (int i = 0; i <  N; i++)
    {
        e.push_back(array[i]);
    }
    return e;
}

数组衰减为指针,如果需要模板函数中数组的大小,可以将函数更改为下面的值

template <typename listType, std::size_t N, typename arrayX>
listType  addList(listType e , arrayX (&array)[N] )
{
     int        sizeOf = sizeof(array);
     int        sizeOfperOne = sizeof(array[0]);
     int        arrSize =  N;
     cout << "Total Byte : " << sizeOf
          << "     BytePerUnit : " << sizeOfperOne
          << " arrSize : " << arrSize
          << endl;
     for (int i = 0; i <  N; i++)
    {
        e.push_back(array[i]);
    }
    return e;
}

主要问题是数组会衰减为指针,因此模板函数addList中的sizeof值实际上是在试图获取sizeofint*

如果addList所做的只是将项目添加到std::list,那么有一些通用的方法可以做到这一点,而无需创建另一个函数

一种方法是使用:


主要问题是数组会衰减为指针,因此模板函数addList中的sizeof值实际上是在试图获取sizeofint*

如果addList所做的只是将项目添加到std::list,那么有一些通用的方法可以做到这一点,而无需创建另一个函数

一种方法是使用:


当他们这样通过的时候。addList中只有一个int*,而不是int数组。@TedLyngmo显示的代码实际上似乎很容易复制。@PaulMcKenzie是否可以编写一个示例?我不想因为英文翻译而弄错。@cigienThat很好。我没有看到它;int*ptrArray=mlArray;列出主列表;MasterListe=addListMasterListe,ptrArray;当他们这样通过的时候。addList中只有一个int*,而不是int数组。@TedLyngmo显示的代码实际上似乎很容易复制。@PaulMcKenzie是否可以编写一个示例?我不想因为英文翻译而弄错。@cigienThat很好。我没有看到它;int*ptrArray=mlArray;列出主列表;MasterListe=addListMasterListe,ptrArray;你认为哪一个在绩效方面更有意义?你认为哪一个在绩效方面更有意义?
template <typename listType, std::size_t N, typename arrayX>
listType  addList(listType e , arrayX (&array)[N] )
{
     int        sizeOf = sizeof(array);
     int        sizeOfperOne = sizeof(array[0]);
     int        arrSize =  N;
     cout << "Total Byte : " << sizeOf
          << "     BytePerUnit : " << sizeOfperOne
          << " arrSize : " << arrSize
          << endl;
     for (int i = 0; i <  N; i++)
    {
        e.push_back(array[i]);
    }
    return e;
}
#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
#include <string>

class TradeList
{
    public:
        int      PosTicket  ;
        std::string   Pairs      ;
        double   OpenPrice  ;
        double   StopLoss   ;
        double   TakeProfit ;
};

int main()
{
    TradeList mlArray[5];
    std::list<TradeList>   MasterListe;
    std::copy_n(mlArray, std::size(mlArray), std::inserter(MasterListe, MasterListe.end()));
    std::cout << MasterListe.size();
}
5