Non*_*biz 1 c++ struct loops anonymous-types
我想从文件中按行收集的数据创建一个结构.每一行都需要一个新的结构,并在while循环中访问这些行.在C#中,我通过创建匿名结构并将它们添加到结构列表来实现此目的.C++似乎不允许匿名结构.我尝试使用递增变量命名它们,但是这不起作用,因为变量名称是字面意义的 - 无论如何,我宁愿不要被迫使用这种方法,因为我讨厌无关名称的想法.我想我可以通过一个独特的属性命名结构,但显然,我宁愿使用属性作为...财产.此外,如果它们不一定都是独一无二的呢?
有人可以提出建议或解释一些我错过的东西吗?
谢谢!
在c#中(psuedo:
public static List<Referral> Referrals = new List<Referral>();
//in loop:
var NewReferral = new Referral(referringURL.Trim(), referringWords.Trim().ToLower() , 1);
if ( NewReferral.URL == referringURL.Trim() ) {Referrals.Add(NewReferral);
Run Code Online (Sandbox Code Playgroud)
在c ++中:
list<CollectedData> AllData;
ifstream myFile("test_data.txt");
if (myFile.fail()) {cout << "Error opening file"; return 0;}
else
{
cout << "File opened... \n";
while( getline(myFile, line) ) {
struct CollectedData;
//add property values
//add struct to struct list
}
}
Run Code Online (Sandbox Code Playgroud)
(请详细了解它们何时自动删除,它可能没有帮助,但我想知道.谢谢!)
除了两件事之外,你的C++看起来是正确的.一,你必须在某处定义CollectedData结构的形式,你需要为结构变量命名两个:
例如,如果您像这样定义CollectedData结构
struct CollectedData {
int field1;
std::string field2;
bool field3;
// etc
};
Run Code Online (Sandbox Code Playgroud)
然后在你的内循环中你可以做到这一点
while( getline(myFile, line) ) {
CollectedData lineData;
//add property values
lineData.field1 = /*whatever*/;
lineData.field2 = /*whatever*/;
lineData.field3 = /*whatever*/;
//add struct to struct list
AllData.push_back(lineData);
}
Run Code Online (Sandbox Code Playgroud)
每次循环时,都会创建一个新的CollectedData对象,并填充其字段,然后将其副本推送到AllData列表中,最后自动销毁该对象(请记住列表中仍存在副本).
关于何时销毁对象的细节
C++有三种存储方式:静态,自动和动态.
静态存储对象在程序的整个生命周期中都存在.在类或函数之外创建的任何对象都是静态的(即全局变量是静态的).对于使用'static'关键字在类或函数内声明的任何内容也是如此.
动态存储对象是使用关键字"new"(或使用malloc()创建的对象,但这是一个C-ism,除非确实需要,否则通常应该在C++中避免使用).动态存储对象是其生命周期由程序员手动管理的对象.动态存储的对象将继续存在,直到您使用关键字"delete"销毁它.请注意,您可以访问动态存储对象的唯一方法是通过指针或引用.如果您没有使用指针或引用,则它不是动态的(但指针/引用也可以引用非动态对象).
自动存储对象是常规变量:结构和类的成员变量,以及方法和函数中的局部变量(包括参数).
函数内定义的自动存储对象是在运行定义它们的代码行时创建的.当它们"超出范围"时,它们会自动销毁,也就是说,当它们在其中声明的块终止时.通常,"块"是一组括号:{}.因此,当函数返回时,在函数内部创建的任何内容都会被销毁,同样,当循环到达其结尾时,无论是否终止或迭代,都会自动销毁在while循环体内创建的任何内容.
定义为类或结构成员的自动存储对象在创建包含它们的对象时创建,并在销毁包含它们的对象时销毁.
(我在上面重复使用了术语"对象",但是相同的规则适用于基本类型,如int,char,bool等)
| 归档时间: |
|
| 查看次数: |
10819 次 |
| 最近记录: |