使用动态结构分配列表

问题描述 投票:0回答:1

这是我第一次来这里!

我想做一些简单的事情,但对于我自己的一生,我似乎无法弄清楚……

我正在读取包含数据的文件。在这些数据中,我具有对我有意义的特定标签。我称它们为“标签”,但在文件中,它是代表某些内容的文本字符串。我需要在找到每个标签之后提取这些标签以及其他两个字符串。标签和数据将存储在动态创建的结构中,因为我不知道要提取多少个标签。因此,我无法创建包含100个元素的结构,因为我可能只需要50个元素,就像我需要150个元素一样。

[基本上,文件会循环循环读取,直到遇到EOF。解析文件时,找到标记后,将正确读取标记名称和相关的以下两个字符串。然后,我需要将它们存储在结构中。提取后,循环将重新启动,并重复标记和数据提取,直到最后。一旦读取了整个文件并且以动态结构提取了所有标记,所有这些数据将被转储到文件中,然后可以刷新动态分配的内存。

有人告诉我要使用列表,但是我似乎无法弄清楚如何使它生效。理想情况下,功能性代码片段将有很大帮助。我在C ++中这样做(C很好)。

我尝试过但未编译的示例:

struct MyStruct
{
    char Tag[30];
    char String1[30];
    char String2[30];
};

int Counter;

std:list<MyStruct> MyList;

MyStruct Data;

std:list<MyStruct>::iterator it;


for( Counter = 0; Counter < 5; Counter++)
{
    strcpy( Data.Tag, "Tag" );
    strcpy( Data.String1, "String1" );
    strcpy( Data.String2, "String2" );

    MyList.push_back(Data);
}

it = MyList.begin();
while (it != MyList.end())
{
    cout << "Tag: " << it->Tag << "First: " << it->String1 << "Second: " << it->String2 << endl;
    it++;
}

谢谢!

c++ arrays list structure
1个回答
0
投票

代替列表尝试使用向量,如果需要,向量可以分配更多的内存。

std::vector

向量的存储会自动处理,扩展并根据需要收缩。向量通常比静态占用更多的空间数组,因为分配了更多的内存来处理将来的增长。这个向量不需要每次元素都重新分配的方式插入,但仅当附加内存用完时。总数可以使用Capacity()函数查询已分配的内存量。

示例:

#include <iostream>
#include <vector>

int main()
{
    // Create a vector containing integers
    std::vector<int> v = {7, 5, 16, 8};

    // Add two more integers to vector
    v.push_back(25);
    v.push_back(13);

    // Iterate and print values of vector
    for(int n : v) {
        std::cout << n << '\n';
    }
}

P.S

如果您也不知道Tag,String1,String2值的长度,请尝试将MyStruct变量替换为字符串类型(而不是char)。

© www.soinside.com 2019 - 2024. All rights reserved.