C++ Linux C++_MyFirst.\u MyLast向量等价

C++ Linux C++_MyFirst.\u MyLast向量等价,c++,linux,c++11,vector,stdvector,C++,Linux,C++11,Vector,Stdvector,在使用VS2013的Windows上,我使用._MyFirst和._MyLast获取指向向量第一个和最后一个元素的指针,以便通过指针递增进行快速操作 vec._MyFirst->element = anotherElement; vec._MyFrist++; 在Linux上,虽然这似乎不存在,但我认为一定有一个等价物。有人知道是什么吗 我知道不应该这样做,但在调试模式下使用它们几乎没有开销,因此允许我在大量向量上快速进行测试 _MyFirst是向量本身指向第一个元素的直接指针,MyLa

在使用VS2013的Windows上,我使用._MyFirst和._MyLast获取指向向量第一个和最后一个元素的指针,以便通过指针递增进行快速操作

vec._MyFirst->element = anotherElement;
vec._MyFrist++;
在Linux上,虽然这似乎不存在,但我认为一定有一个等价物。有人知道是什么吗

我知道不应该这样做,但在调试模式下使用它们几乎没有开销,因此允许我在大量向量上快速进行测试

_MyFirst是向量本身指向第一个元素的直接指针,MyLast指向最后一个元素。与使用迭代器相比,遍历向量要快得多,我增加指针内存地址,这就是我使用它们的原因。此外,如果向量曾经调整过大小,_MyFirst和._MyLast将始终指向第一个和最后一个元素。在linux上,它们不会以该名称出现


谢谢

您只需获取一个指向内部容器开头的指针,并将其递增以获得结尾

auto fPtr = vec.data();
auto ePtr = fPtr + vec.size();

您可以只获取一个指向内部容器开头的指针,并将其递增以获得结尾

auto fPtr = vec.data();
auto ePtr = fPtr + vec.size();

好的,我看到您正在寻找调试信息的性能。一种方法(正如您正在做的)是编译一个没有优化的调试版本,然后通过编写非标准代码来寻求“手动优化源代码”

另一个当然是编写符合标准的代码,只需打开优化和调试输出

我在回答问题的时候举例说明了编写正确代码的成本


TL;DR-开销为零。

好的,我看到您正在使用调试信息寻找性能。一种方法(正如您正在做的)是编译一个没有优化的调试版本,然后通过编写非标准代码来寻求“手动优化源代码”

另一个当然是编写符合标准的代码,只需打开优化和调试输出

我在回答问题的时候举例说明了编写正确代码的成本


TL;DR-开销为零。

您还可以通过以下方式获取指针:

auto sPtr = &vec.front();
auto lastPtr = &vec.back();
结束指针位于最后一个元素后的一个位置:

auto ePtr = lastPtr + 1;

注意:对于data()方法,您需要c++11或更高版本。VS 2013在一定程度上支持该标准,但在Linux下,您可能需要告诉他使用该标准。

您还可以通过以下方式获得指针:

auto sPtr = &vec.front();
auto lastPtr = &vec.back();
结束指针位于最后一个元素后的一个位置:

auto ePtr = lastPtr + 1;

注意:对于data()方法,您需要c++11或更高版本。VS2013在一定程度上支持这一标准,但在Linux下,您可能需要告诉他使用该标准。

这是非常不标准的。vec.begin()有什么问题
vec.end()
?迭代器只是围绕指针的非常纤细的包装,几乎所有内容都是内联的。(事实上,它们甚至可能是指针)。例如,有一些标准的方法可以将指针插入数据,但它们可能不适合您所做的工作。@bob作为猜测,OP注意到它更快了。。。在debug中,迭代器使用额外的检查进行检测。然后没有签入释放。这是正确的!由于我在调试模式下进行测试,并且使用具有+600000个点的点云,测试速度可能会非常慢,因此使用_MyFirst和_MyLast进行的检查更少,开销也更低:)@user1031204 Ok,这是有意义的。你试过分析你的优化发布版本吗?我确实试过,甚至在发布版本中,我发现使用它们可以稍微提高速度,但这是超小的,不值得。但在调试时,使用点云时获得0.2fps和19fps是有区别的,这是非常不标准的。vec.begin()有什么问题
vec.end()
?迭代器只是围绕指针的非常纤细的包装,几乎所有内容都是内联的。(事实上,它们甚至可能是指针)。例如,有一些标准的方法可以将指针插入数据,但它们可能不适合您所做的工作。@bob作为猜测,OP注意到它更快了。。。在debug中,迭代器使用额外的检查进行检测。然后没有签入释放。这是正确的!由于我在调试模式下进行测试,并且使用具有+600000个点的点云,测试速度可能会非常慢,因此使用_MyFirst和_MyLast进行的检查更少,开销也更低:)@user1031204 Ok,这是有意义的。你试过分析你的优化发布版本吗?我确实试过,甚至在发布版本中,我发现使用它们可以稍微提高速度,但这是超小的,不值得。但是,在调试时,使用点云时获得0.2fps和19fps是有区别的。我使用的向量大小调整了很多,因此_MyFirst和_MyLast始终保持最新。我使用的向量大小调整了很多,因此_MyFirst和_MyLast始终保持最新