我有以下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文件打包程序的片段。
我需要知道这一点,因为我正在尝试
答案 0 :(得分:1)
假设strings
是map<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
,这是从p3tOffsetType
到string
的地图。如果在地图中找到了追捧的字符串,则它返回偏移量。如果没有,那么它将当前偏移量的字符串存储为键,并将字符串的长度添加到全局变量string_offset
(我假设初始化为零)。
基本上,构建了字符串及其偏移的映射。因此,如果您使用“Hello”,“test”和“bla”调用它,它将包含以下内容:
strings[0] = "Hello"
strings[6] = "test"
strings[11] = "bla"
这可以说是跟踪字符串以及它们在“更大”字符串中的位置。