无法将std :: array转换为int?

时间:2016-04-21 03:37:46

标签: c++ arrays c++11 stl

我只是在学习c ++而且正在尝试理解数组。所以原谅我对这里的错误一无所知。

#include <iostream>
#include <string>
#include <array>
using namespace std;

void readArray(int *readfile, int ArraySize){
    int Interator;
    for(Interator = 1; Interator < ArraySize; Interator++){
        cout << " " << readfile[Interator];
    }
}

int main(){
    std::array<int, 5> array2={{1, 2, 3, 4, 5}};
    readArray(array2, array2.end());
}
  

错误:无法转换&#st; :: array&#39;到&#39; int *&#39;对于arg&#39; 1&#39;无效&#39; readArray&#39;

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

您不能像编译器那样将std::array转换为int*。对于这种转换,您可以使用普通旧数组:

void readArray(int *readfile, int ArraySize)
{
    int Interator;
    for(Interator = 0; Interator < ArraySize; Interator++)
    {
        cout << " " << readfile[Interator];
    }
}

int main()
{
    //std::array<int, 5> array2={{1, 2, 3, 4, 5}};
    int array2[] = {1, 2, 3, 4, 5};
    readArray(array2, 5);
}

此外,Interator更改为从零开始。如果您需要std::array,请使用std::array::begin()std::array::begin()

void readArray2(const std::array<int, 5>& a)
{
    for (auto elem : a)
        cout << " " << elem;
}

int main()
{
    std::array<int, 5> array2={{1, 2, 3, 4, 5}};
    //int array2[] = {1, 2, 3, 4, 5};
    readArray2(array2);
}

答案 1 :(得分:2)

只需浏览some reference即可发现std::array有一个T* data()和一个constexpr size_type size(),可以而且应该用于此目的。

但这是一个糟糕的解决方案。最好的解决方案是直接使用迭代器,例如:

template <typename T> void readArray(const T& data) {
  for (const auto& element : data)
    cout << element;
}

std::array<int, 5> data1 = { 1, 2, 3, 4, 5};
readArray(data1);
std::vector<int> data2 = {1, 2, 3, 4, 5};
readArray(data2);
std::list<int> data3 = {1, 2, 3, 4, 5};
readArray(data3);

哪个版本会T成为具有正确beginend()重载的类型。

如果您尝试使用 C 解决方案,使用 C ++ 11 标记问题是没有意义的,