gpt4 book ai didi

c++ - 如何将元素从 std::list 复制到结构数组?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:26:14 26 4
gpt4 key购买 nike

我需要将std::list 的内容复制到数组 中,其中数组是数组的结构。下面是它的代码实现。

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

typedef struct
{
int height;
int width;
int length;
}dimensions;
GetDimensions(list<std::string>, *int); // Function that copies the content of list to array passed as second parameter

int main()
{
dimensions cuboid[10];
int plane[10];

list<std::string> planeList = GetList();//Function that returns list of elements
list<std::string> dimensionList = GetList();

GetDimensions(planeList,&plane);//This is fine, as it is a simple array
GetDimensions(dimensionList,&cuboid.height);//Trouble in implementation of this usecase, for cuboid.height, cuboid.width and cuboid.height.
return 0;
}

GetDimensions(list<std::string>dimensionList, int* dimensionParams)
{
int i=0;
for(list<std::string>::iterator it = dimensionList.begin(); it != dimensionList.end(); ++it)
{
dimensionParams[i] = stoi(*it);
i++;
}
}

在这里,我需要 GetDimensions() 函数将列表(作为第一个参数传递)复制到数组(第二个参数)。实现的函数适用于简单数组 plane。但是如何将结构数组作为参数传递给函数呢?

我将获取 std::list 作为 cuboid.heightcuboid.widthcuboid.length。所以该函数必须将 list 的内容从 cuboid[0].height 分别复制到 cuboid[i].height 。直接复制内容有什么具体的功能吗?

最佳答案

使用std::array的代替。然后您的问题可以简化为将两种不同类型的数组传递给单个函数。

这个可以解决

以下是带有 if-constexpr ( See live online )

模板函数的示例代码
#include <iostream>
#include <string>
#include <list>
#include <array>
#include <type_traits> // std::is_same_v

struct dimensions // no need to typedef here
{
int height;
int width;
int length;
};

template<typename T>
void GetDimensions(const list<std::string>& dimensionList, T& dimensionParams)
^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //---> pass list by const-ref as the values are non-modifying
{
int i{0};
if constexpr (std::is_same_v<std::array<int, 10>, T>)
{
for(const std::string& str: dimensionList) dimensionParams[i++] = std::stoi(str);
}
else
{
for(const std::string& str: dimensionList) dimensionParams[i++].height = std::stoi(str);
}
}

int main()
{
std::array<dimensions, 10> cuboid; // use std::array instead of VLA
std::array<int, 10> plane;

std::list<std::string> planeList{"1", "2"}; // some list
std::list<std::string> dimensionList{"1", "2"};

GetDimensions(planeList, plane);
GetDimensions(dimensionList, cuboid);
return 0;
}

另请注意:

  • 您没有指定 GetDimensions 函数的返回类型。您可能想在那里返回 void
  • 在 C++ 中,您不需要为 struct { ... } 使用 typedef 别名。

  • 最后但同样重要的是,不要用 using namespace std; 练习

关于c++ - 如何将元素从 std::list 复制到结构数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57569196/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com