我想简单地问你一些我在我正在设计的算法中无法解决的问题。 我问一个纯粹是学习的问题。 我搜索了stackoverflow和Uncle Google,但我没有看到合乎逻辑的解决方案。
struct MyStruct_1
{
int number[];
};
想象一下它是这样一个结构,或者想象其中还有其他一些不是数组的东西。
struct MyStruct_2
{
int id;
string ModelName;
int number[];
};
**Insert ==>>> ID = 1 ModelName = "ModelA" number = { 6,7,8,9, 57 }
Insert ==>>> ID = 2 ModelName = "ModelB" number = { 3,17,9,28,8 }
*****************************************************************
Update/Delete ==>>> ID = 2 ModelName = "ModelB" number = { 9 }
Update/Delete ==>>> ID = 1 ModelName = "ModelA" number = { 57 }
*****************************************************************
Insert/Add ==>>> ID = ModelName = "ModelA" number = 103**
这样,从结构到C++语言;
list<MyStruct> demoListe
当我创建时
我的第一个问题:我们如何提供数据输入? push_back ({ 9,3,65,2 }(;我试过了,但收到一条错误消息。
我的第二个问题:回答数据输入数据的朋友也可以样本读取数据吗?
我要感谢所有将帮助并引导我找到正确解决方案的人。
问候
请注意,这段代码是可以的:
struct st
{
int id;
string s;
};
vector<st> v;
v.push_back({1, "abc"});
但是不能用{}
初始化数组,所以使用向量容器:
struct st
{
int id;
string s;
vector<int> v;
};
vector<st> u;
u.push_back({1, "abc", vector<int>{1, 1, 2}});
标准C++中禁止使用灵活数组。您应该改用std::vector
:
#include <algorithm>
#include <iostream>
#include <iterator>
#include <list>
#include <vector>
#include <string>
struct MyStruct
{
int id;
std::string ModelName;
std::vector<int> number;
};
int main() {
// initialized with a few numbers
MyStruct ms{1, "model", {2,3,4}};
// push_back a new number
ms.number.push_back(5);
// print the numbers
for(int value : ms.number) {
std::cout << value << 'n';
}
// or make a std::list<MyStruct>
std::list<MyStruct> demoListe {
{1, "model_a", {2,3,4}},
{2, "model_b", {5,6,7,8}}
};
// add a model
demoListe.emplace_back(MyStruct{3, "model_c", {11,22}});
// add 99 to model_a
auto ait = std::find_if(demoListe.begin(), demoListe.end(),
[](const MyStruct& ms) { return ms.id==1;} );
if(ait != demoListe.end())
ait->number.push_back(99);
// remove 7 from model_b
auto bit = std::find_if(demoListe.begin(), demoListe.end(),
[](const MyStruct& ms) { return ms.id==2;} );
if(bit != demoListe.end()) {
auto seven = std::find(bit->number.begin(), bit->number.end(), 7);
if(seven != bit->number.end())
bit->number.erase(seven);
}
// print result
for(const MyStruct& ms : demoListe) {
std::cout << "id: " << ms.id << " model: " << ms.ModelName << 'n';
std::copy(ms.number.begin(), ms.number.end(),
std::ostream_iterator<int>(std::cout, " "));
std::cout << 'n';
}
}