我想创建一个程序来反转数组,但是却收到错误消息,即数组a []的存储大小未知。
df <- structure(list(person1 = c(112, 164, 161, 191, 125, 125, 146,
146, 200, 200), person2 = c(576, 987, 191, 161, 146, 200, 125,
200, 125, 146)), row.names = c(NA, -10L), class = c("tbl_df",
"tbl", "data.frame"))
答案 0 :(得分:3)
我想创建程序来反转数组
为此只需使用std::vector。
一个好的开始是:
#include <iostream>
#include <vector>
int main()
{
std::size_t size;
std::cin >> size; // size of the array
std::vector<int> a(size);// allocate memory for provided size and
// initialize with 0's
// using range based loop iterate though referances of
// each elements in the array and update with user input.
for (int& element : a) std::cin >> element;
return 0;
}
答案 1 :(得分:1)
后者简单,优雅且高效-适用于与int
类似的任何类型。但是,如果要处理更复杂的类型,则使用此方法,首先要默认初始化所有元素,然后复制或移动分配最终对象,这是您很可能希望避免的。在这种情况下,以下方法会更好:
std::vector<SomeComplexType> v;
v.reserve(NumberOfObjectsYouNeed);
// appropriate loop definition here!
{
v.emplace_back(/* the parameters you want to/must provide to constructor */);
}
答案 2 :(得分:1)
您没有为a[]
数组定义大小,因此没有错误消息。数组必须具有指定的大小。在您的情况下,您需要根据用户确定大小后使用new[]
运算符来分配数组,例如:
#include <iostream>
int main() {
int *a;
int b;
std::cin >> b;
a = new int[b];
for(int i = 0; i < b; ++i)
std::cin >> a[i];
for(int c = b - 1; c >= 0; --c)
std::cout << a[c] << std::endl;
delete[] a;
return 0;
}
但是,在C ++中使用动态大小的数组的首选方法是使用标准std::vector
容器,例如:
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
int main() {
std::vector<int> a;
int b;
std::cin >> b;
a.reserve(b);
std::copy_n(
std::istream_iterator<int>(std::cin), n,
std::back_inserter(a)
);
std::for_each(a.rbegin(), a.rend(),
[](int i){ std::cout << i << std::endl; }
);
/* alternatively:
std::reverse(a.begin(), a.end());
for(int i : a)
std::cout << i << std::endl;
*/
return 0;
}
答案 3 :(得分:-2)
您必须分配最大数组大小 只需通过分配数组的长度来尝试 防爆 Int a [5];