const
个变量无法修改。我知道我可以通过以下方式定义const int
:
const int a[5]={0,1,2,3,4};
但问题是我不确切知道数据是什么。只读一次数据就足够了,我可以通过一些指针操作将它们存储在const数组中吗?如果你能给出一些提示,我将不胜感激:)
答案 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); }
程序返回读取的整数之和。