C++ 结构初始化数组
C++ Array of struct initialization
我不太习惯用 C++ 编码,这可能是一个简单的问题,我无法获得正确的语法。
我基本上想要实现的是,从一个声明结构数组(未指定大小)的方法,我调用一个传递该数组的方法。该方法应初始化数组的值。我试图让一个简单的代码工作但出现错误。下面的一段代码给我一个编译错误。有人可以指出如何实现这一目标吗?
struct ABC
{
int a;
int b;
};
void test(ABC * a)
{
a[] = {{2,3},{4,5}};
}
int main() {
ABC arr[2];
test(arr);
}
编辑:
以下工作正常,但我希望初始化在一行中工作。
struct ABC
{
int a;
int b;
};
void test(ABC *a)
{
a[0].a = 2;
a[0].b = 3;
a[1].a = 4;
a[1].b = 5;
}
int main() {
ABC arr[2];
test(arr);
}
初始化每个访问其在 a
数组中的索引的结构。
void test(ABC * a)
{
a[0] = {2,3};
a[1] = {4,5};
...
这样 {{2,3},{4,5}};
将用于初始化,即
ABC arr[2] = {
{2,3},
{4,5}
};
你得先找出数组的实际大小,然后迭代初始化它。
不会生效,见下文
void test(ABC* a) {
int value=2;
for (int i=0;i++;i<sizeof(a)/sizeof(ABC)) {
a[i].a=value;
a[i].b=value+1;
value+=2; } }
我不是 100% 确定 sizeof(a) 会为您提供数组的大小。如果这不起作用,则必须将数组的大小作为参数传递:
void test(ABC* a, int elements) {
int value=2;
for (int i=0;i++;i<elements) {
a[i].a=value;
a[i].b=value+1;
value+=2; } }
int main() {
ABC arr[2];
test(arr,2); }
您可以使用这样的设置,利用 C++ 标准库。使用 -std=c++11
标志编译它以允许我在 push_back
:
中进行的初始化
#include <vector>
#include <iostream>
struct ABC
{
int a;
int b;
};
void test(std::vector<ABC>& a)
{
a.push_back({2,3});
a.push_back({4,5});
}
int main()
{
std::vector<ABC> arr;
test(arr);
// Test the outcome...
std::cout << "The size is: " << arr.size() << std::endl;
for (ABC& a : arr)
std::cout << "Element (" << a.a << "," << a.b << ")" << std::endl;
return 0;
}
我不太习惯用 C++ 编码,这可能是一个简单的问题,我无法获得正确的语法。
我基本上想要实现的是,从一个声明结构数组(未指定大小)的方法,我调用一个传递该数组的方法。该方法应初始化数组的值。我试图让一个简单的代码工作但出现错误。下面的一段代码给我一个编译错误。有人可以指出如何实现这一目标吗?
struct ABC
{
int a;
int b;
};
void test(ABC * a)
{
a[] = {{2,3},{4,5}};
}
int main() {
ABC arr[2];
test(arr);
}
编辑:
以下工作正常,但我希望初始化在一行中工作。
struct ABC
{
int a;
int b;
};
void test(ABC *a)
{
a[0].a = 2;
a[0].b = 3;
a[1].a = 4;
a[1].b = 5;
}
int main() {
ABC arr[2];
test(arr);
}
初始化每个访问其在 a
数组中的索引的结构。
void test(ABC * a)
{
a[0] = {2,3};
a[1] = {4,5};
...
这样 {{2,3},{4,5}};
将用于初始化,即
ABC arr[2] = {
{2,3},
{4,5}
};
你得先找出数组的实际大小,然后迭代初始化它。
不会生效,见下文
void test(ABC* a) {
int value=2;
for (int i=0;i++;i<sizeof(a)/sizeof(ABC)) {
a[i].a=value;
a[i].b=value+1;
value+=2; } }
我不是 100% 确定 sizeof(a) 会为您提供数组的大小。如果这不起作用,则必须将数组的大小作为参数传递:
void test(ABC* a, int elements) {
int value=2;
for (int i=0;i++;i<elements) {
a[i].a=value;
a[i].b=value+1;
value+=2; } }
int main() {
ABC arr[2];
test(arr,2); }
您可以使用这样的设置,利用 C++ 标准库。使用 -std=c++11
标志编译它以允许我在 push_back
:
#include <vector>
#include <iostream>
struct ABC
{
int a;
int b;
};
void test(std::vector<ABC>& a)
{
a.push_back({2,3});
a.push_back({4,5});
}
int main()
{
std::vector<ABC> arr;
test(arr);
// Test the outcome...
std::cout << "The size is: " << arr.size() << std::endl;
for (ABC& a : arr)
std::cout << "Element (" << a.a << "," << a.b << ")" << std::endl;
return 0;
}