C++ STD::容器(vector)如何存储内部构件(元素地址、索引访问)?

C++ STD::容器(vector)如何存储内部构件(元素地址、索引访问)?,c++,stl,containers,std,stdvector,C++,Stl,Containers,Std,Stdvector,我试图破解一个游戏红色警报3,我试图制作一个程序,显示我的对手的单位列表。至于这一点,我首先需要找到一个静态指针,指向我自己的列表,我可以在单人游戏机上完成 我注意到了这种行为:通过查看add_单元代码更改了哪些地址: 如果一个单位还没有建成,为它创建一个新地址?并将该值设置为该类型的1个单位 当单位在游戏中已经建立一次时,单位类型的原始地址增加1 在我看来,这类似于std::vector行为。现在我很难找到向量的基址,还有一个更大的问题:如何通过索引访问?std::vector在哪里存储它的元

我试图破解一个游戏红色警报3,我试图制作一个程序,显示我的对手的单位列表。至于这一点,我首先需要找到一个静态指针,指向我自己的列表,我可以在单人游戏机上完成

我注意到了这种行为:通过查看add_单元代码更改了哪些地址:

如果一个单位还没有建成,为它创建一个新地址?并将该值设置为该类型的1个单位 当单位在游戏中已经建立一次时,单位类型的原始地址增加1 在我看来,这类似于std::vector行为。现在我很难找到向量的基址,还有一个更大的问题:如何通过索引访问?std::vector在哪里存储它的元素地址

额外信息:

<> >代码是从我从汇编中读取的,用MS Visual C++ 2005编写的,MsCR8080 DLL需要播放

这是向量中的地址的样子:

突出显示的地址显示为第一个元素-第一个单元构建

这看起来不像我可以通过添加一个常量值来迭代


每当添加一个新地址时,所有其他地址都是完全有效的,不会改变。

vector的一个典型但并非强制性的实现是有三个连续的字:

struct TypicalVector
{
    T * start;
    T * end;
    T * capacity;
};

元素访问是通过start[i]完成的,这就是为什么将start指针放在前面很重要,以避免不必要的偏移量计算,大小是end-start,容量是capacity-start。内存分配获得c*sizeofT字节,并将start设置为分配内存的地址和start+c的容量。元素构造递增结束。

向量的一个典型但并非强制性的实现是有三个连续的字:

struct TypicalVector
{
    T * start;
    T * end;
    T * capacity;
};


元素访问是通过start[i]完成的,这就是为什么将start指针放在前面很重要,以避免不必要的偏移量计算,大小是end-start,容量是capacity-start。内存分配获得c*sizeofT字节,并将start设置为分配内存的地址和start+c的容量。元素构造增量结束。

完全取决于编译器供应商提供的实现。该标准只描述了接口和您对容器的要求,而不是实现细节。伙计们……问题不必由语言标准定义就可以生效。他问的是一个公开的,编译的程序,每个人都可以使用。这是一个非常有效的问题。代码是从我从汇编中读取的,用Visual C++ 2008汇编的MSVCR80DLL是需要的,PrimeBug也规定了向量存储在相邻存储器中的对象。因此,如果您有基址,您可以获得任何元素的地址作为基址的偏移量。链接MSVCRT80.DLL等表明该应用程序是使用Visual Studio 2005(也称为MSVC8)构建的。Visual Studio 2008(也称为MSVC9)将使用MSVCRT90.DLL等。完全取决于编译器供应商提供的实现。该标准只描述了接口和您对容器的要求,而不是实现细节。伙计们……问题不必由语言标准定义就可以生效。他问的是一个公开的,编译的程序,每个人都可以使用。这是一个非常有效的问题。代码是从我从汇编中读取的,用Visual C++ 2008汇编的MSVCR80DLL是需要的,PrimeBug也规定了向量存储在相邻存储器中的对象。因此,如果您有基址,您可以获得任何元素的地址作为基址的偏移量。链接MSVCRT80.DLL等表明该应用程序是使用Visual Studio 2005(也称为MSVC8)构建的。Visual Studio 2008(也称为MSVC9)将使用MSVCRT90.DLL等。我注意到添加的新地址有时比第一个添加的地址低,有时比第一个添加的地址大,这是否意味着start正在更改为最低地址?@GamErix:这是一个动态容器,因此,当容量需要增加时,整个缓冲区会重新分配。然而,在游戏中,地址总是工作的,不会改变,那么它是如何完成的呢o@GamErix:问开发商?!谁说数据甚至在一个连续的数组中?它可以是任何其他类型的数据结构。。。deque,或者是链表?所有数据结构是否都有文档化的内部结构,以便我可以全部试用我注意到,添加的新地址有时比第一个添加的地址低,有时比第一个添加的地址大,这是否意味着开始地址正在更改为最低地址?@GamErix:这是一个动态容器,因此当容量需要增加时,整个缓冲区会重新分配。然而,地址
游戏中的工作方式不会改变,那么它是如何完成的呢o@GamErix:问开发商?!谁说数据甚至在一个连续的数组中?它可以是任何其他类型的数据结构。。。deque,或者是链表?所有数据结构是否都有文档化的内部结构,以便我可以全部试用