如何读取数据来构造const数组?

时间:2015-11-03 08:55:07

标签: c++ arrays pointers

声明后,

const个变量无法修改。我知道我可以通过以下方式定义const int

const int a[5]={0,1,2,3,4};

但问题是我不确切知道数据是什么。只读一次数据就足够了,我可以通过一些指针操作将它们存储在const数组中吗?如果你能给出一些提示,我将不胜感激:)

3 个答案:

答案 0 :(得分:4)

使用功能:

std::vector<int> readArray()
{
    std::vector<int> array;
    // populate array
    return array;
}

然后:

const std::vector<int> constArray = readArray();

如果您事先知道元素的数量,请将std::vector替换为std::array

答案 1 :(得分:3)

实际上,您无法将数据动态读取到const数组中。

但是,您可以 - 通过const引用或指针为可变数据提供const 接口

只要您提出有关常量的好问题,您就可以继续前进std::array ......

#include <array>
#include <algorithm>
#include <iostream>

int main() {
    std::array<int, 5> writable = {4,3,0,1,2};
    const std::array<int, 5> & readable = writable;

    // you can mutate the writable (and use algorithms...)
    std::sort(writable.begin(), writable.end());

    // readable[0] = 1020; // this would give an error

    // but read access is fine
    for(int i : readable)
        std::cout << i << ' ';
}

(注意:正如你所说“你不知道你的数据是什么”,有不同程度的不知道。不知道有多少,或知道有多少,但不知道我实际上处理的是足够多的情况,我不知道这些事情是不会发生的,我不会认为这些事情不会发生,但是...其他人都在指出你可能没有的可能性知道有多少。在这种情况下,使用矢量!)

答案 2 :(得分:2)

可以稍微读入一个const数组:

const auto a = []{
    std::array<int, 5> r;
    std::cout << "Enter " << r.size() << " integers: ";
    std::copy_n(std::istream_iterator<int>(std::cin), r.size(), r.begin());

    return r;
}();

<强> Live On Coliru

int main() { return std::accumulate(a.begin(), a.end(), 0u); }

程序返回读取的整数之和。