C++ 使用指向存储在向量中的对象的指针。。。c++;

C++ 使用指向存储在向量中的对象的指针。。。c++;,c++,pointers,iterator,stdvector,C++,Pointers,Iterator,Stdvector,我有一个全局范围内的MyObject向量 std::vector<myObject> 或者应该向它传递一个std::Vector::iterator,并将其递增 现在假设向量在此期间不会被更改。是-标准在技术更正中保证向量的存储是连续的,因此将指针递增到向量将起作用。是-标准在技术更正中保证向量的存储是连续的,因此,将指针递增到向量中是可行的。如果向量没有重新分配,并且您确定不会超出向量的界限,那么您可以使用这种方法。递增指针是合法的,当您有空间移动到下一个元素时,您可以通过递增指

我有一个全局范围内的MyObject向量

std::vector<myObject>
或者应该向它传递一个
std::Vector::iterator
,并将其递增


现在假设向量在此期间不会被更改。

是-标准在技术更正中保证向量的存储是连续的,因此将指针递增到向量将起作用。

是-标准在技术更正中保证向量的存储是连续的,因此,将指针递增到向量中是可行的。

如果向量没有重新分配,并且您确定不会超出向量的界限,那么您可以使用这种方法。递增指针是合法的,当您有空间移动到下一个元素时,您可以通过递增指针来实现,因为向量的缓冲区是单个内存块。

如果向量没有重新分配,并且您确定没有超出向量的边界,那么您可以使用这种方法。递增指针是合法的,当您有空间移动到下一个元素时,您可以通过递增指针来实现,因为向量的缓冲区是单个内存块。

是的,这将按预期工作,因为标准要求
std::vector
使用连续存储。如果您正在处理一系列对象,我建议您传入一对迭代器。这几乎是STL使用的标准习惯用法。这将使您的代码更加安全,因为您有一个显式的迭代端点,而不是依赖于计数或类似的东西。

是的,这将按照预期工作,因为标准要求
std::vector
使用连续存储。如果您正在处理一系列对象,我建议您传入一对迭代器。这几乎是STL使用的标准习惯用法。这将使您的代码更加安全,因为您有一个显式的迭代端点,而不是依赖计数或类似的东西。

如何获取指向元素的指针?Krakkos,请注意,您也可以使用&*it;如何获取指向元素的指针?Krakkos,请注意,您也可以通过使用&*it从迭代器获取指向元素的指针;由于向量是全局的,我可以将myObt指针与myObjectVector.end()进行比较吗;我不确定这是否真的安全。。。要使其正常工作,“&vec.back()”或“&*vec.end()”必须是超出连续空间末端的对象,我不认为这在标准中是一个保证。由于该向量是全局的,我可以将myObt指针与myObjectVecor.end()进行比较吗;我不确定这是否真的安全。。。要使其正常工作,“&vec.back()”或“&*vec.end()”必须是超出连续空间末端的对象,我不认为这是标准中的保证。是的,不会重新分配vecotr,但最终我可以达到向量边界。。。我可以在使用它之前检查pmyObj==myObjectVector.end()吗?至少你可以通过VC++实现这样做。pObj==vec.end()只有在向量迭代器只是一个不能保证的typedef T*时才有效。vector不提供对其内部指针的直接访问,并且您无法取消vec.end()的定义,因此,您可以对照end(&vec[0]+vec.size())检查原始指针的唯一时间是当vec.size()>=1时。是的,不会重新分配vector,但最终我可以达到vector边界。。。我可以在使用它之前检查pmyObj==myObjectVector.end()吗?至少你可以通过VC++实现这样做。pObj==vec.end()只有在向量迭代器只是一个不能保证的typedef T*时才有效。vector不提供对其内部指针的直接访问,并且您无法对vec.end()进行解引用,因此您唯一可以对照end(&vec[0]+vec.size())检查原始指针的时间是当vec.size()>=1时。std::vector除外!因为除了std::vector之外,它是“特殊的”!因为它“特别”
myObject* pmObj;

++pmObj; // the next element ??