帮助解释c ++方法

时间:2011-06-18 11:25:53

标签: c++

我有以下c ++方法:

typedef unsigned long p3tOffsetType;
p3tOffsetType buildString(std::string string)
{
    for (stringMap::const_iterator string_iterator = strings.begin(); string_iterator != strings.end(); ++string_iterator)
    {
        if (string_iterator->second == string)
            return string_iterator->first;
    }
    p3tOffsetType new_string_offset = string_offset;
    strings[string_offset] = string;
    string_offset += string.size() + 1;

    return new_string_offset;
}

该功能有什么作用?如果需要,我可以提供更多代码。 该代码是源P3TBuilder(版本2.7)中的P3T文件打包程序的片段。

我需要知道这一点,因为我正在尝试

2 个答案:

答案 0 :(得分:1)

假设stringsmap<p3tOffsetType, std::string>并且string_offset初始化为零,它似乎执行以下操作:假设您使用,例如{调用方法几次{1}},"Hello""Hi",并且您将所有这些字符串视为C字符串并将它们存储在同一个"Hey"数组中。然后数组元素为char。三个字符串的起始索引分别为0,6和9。该方法的作用是创建一个映射,将这些起始索引映射到字符串,因此{'H', 'e', 'l', 'l', 'o', '\0', 'H', 'i', '\0', 'H', 'e', 'y', '\0'}strings[0] == "Hello"strings[6] == "Hi"。此外,它消除了重复,因此使用strings[9] == "Hey"再次调用该方法将使地图保持不变。

答案 1 :(得分:1)

它迭代strings,这是从p3tOffsetTypestring的地图。如果在地图中找到了追捧的字符串,则它返回偏移量。如果没有,那么它将当前偏移量的字符串存储为键,并将字符串的长度添加到全局变量string_offset(我假设初始化为零)。

基本上,构建了字符串及其偏移的映射。因此,如果您使用“Hello”,“test”和“bla”调用它,它将包含以下内容:

strings[0] = "Hello"
strings[6] = "test"
strings[11] = "bla"

这可以说是跟踪字符串以及它们在“更大”字符串中的位置。