我有一个结构,其中包含有关几何图形的信息。我的问题是,我不知道要显示唯一的图形的体积(这意味着另一个图形没有相同的体积)。如果有人知道,请帮助我。
struct Sfere
{
char codsf[5];
char colour[15];
char material[15];
float r,area,volume;
} sf[100]
答案 0 :(得分:0)
sf[i].volume
访问结构数组中第i个元素的体积字段
要使算法查找体积的唯一值,它取决于您的数据集。
最通用的方法是使用'volume'作为键对数组进行排序。以这种方式对数组进行排序时,只需忽略相同值的连续条目,就很容易计算唯一条目。
示例:
'1 6 7 2 7 9 7'变为'1 2 6 7 7 7 9',则您删除了相同值的连续条目,或者忽略了'1 2 6 7 9'。并且您具有唯一卷条目的列表。
更新:
@Max Langhof建议使用std :: unique更干净。您只需要使用std :: vector来具有迭代器和lambda即可指定要处理的字段。
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
int main()
{
typedef struct _Sfere
{
char codsf[5];
char colour[15];
char material[15];
float r,area,volume;
} Sfere;
//Encapsulate structure in a standard vector to have iterators
std::vector<Sfere> my_sfere_vector(10);
//Insert unique elements
my_sfere_vector[1].volume = 1.0;
my_sfere_vector[7].volume = 3.0;
//Show content
for (std::vector<Sfere>::iterator my_element = my_sfere_vector.begin();my_element != my_sfere_vector.end();my_element++)
{
std::cout << " " << my_element->volume;
}
std::cout << "\n";
//Sort the vector
std::sort
(
my_sfere_vector.begin(),
my_sfere_vector.end(),
[](const Sfere &a, const Sfere &b)
{
return a.volume < b.volume;
}
);
//Unique elements
std::vector<Sfere>::iterator last = std::unique
(
my_sfere_vector.begin(),
my_sfere_vector.end(),
[](const Sfere &a, const Sfere &b)
{
return a.volume == b.volume;
}
);
//Prune out excess elements
my_sfere_vector.erase(last, my_sfere_vector.end());
//Show content
for (std::vector<Sfere>::iterator my_element = my_sfere_vector.begin();my_element != my_sfere_vector.end();my_element++)
{
std::cout << " " << my_element->volume;
}
std::cout << "\n";
}
这是结果
0 1 0 0 0 0 0 3 0 0
0 1 3
Process returned 0 (0x0) execution time : 0.015 s
Press any key to continue.