在使用VS2013的Windows上,我使用._MyFirst和._MyLast获取指向向量的第一个和最后一个元素的指针,以便通过指针递增进行快速操作。
vec._MyFirst->element = anotherElement;
vec._MyFrist++;
在Linux上虽然这似乎没有,但我认为必须有相同的。有谁知道它是什么?
我知道不应该这样做,但在使用它们的调试模式下几乎没有开销,因此允许我在大量矢量上快速进行测试。
_MyFirst是向量本身用于第一个元素的直接指针,_MyLast指向最后一个元素的直接指针。而不是使用迭代器,它通过向量更快,因此增加指针存储器地址就是我使用它们的原因。此外,如果向量调整大小,则._MyFirst和._MyLast将始终指向第一个和最后一个元素。在linux上,他们不在那个名字下。
谢谢
答案 0 :(得分:4)
你可以得到一个指向内部容器起点的指针,并将其递增以结束。
auto fPtr = vec.data();
auto ePtr = fPtr + vec.size();
答案 1 :(得分:1)
好的,我看到你正在寻找带有调试信息的性能。一种方式(正如您所做)是编译没有优化的调试版本,然后通过编写非标准代码来寻求“手动优化源代码”。
另一个当然是编写符合标准的代码,只需打开优化和调试输出。
我做了一个例子,说明在回答this question
时一段时间后编写正确代码的成本TL; DR - 开销为零。
答案 2 :(得分:1)
您还可以获得指示:
auto sPtr = &vec.front();
auto lastPtr = &vec.back();
结束指针是最后一个元素之后的一个位置:
auto ePtr = lastPtr + 1;
注意:对于data()方法,您需要c ++ 11或更高版本。 VS 2013部分支持它,但在Linux下你可能需要告诉他使用该标准。