В Windows с использованием VS2013 я использую ._MyFirst и ._MyLast, чтобы получить указатели на первый и последний элементы вектора для быстрой манипуляции с помощью приращения указателя.Linux C++ ._MyFirst ._MyLast vector equivilent
vec._MyFirst->element = anotherElement;
vec._MyFrist++;
В Linux, хотя это, похоже, не существует, но я полагаю, что его эквивалент должен быть эквивалентным. Кто-нибудь знает, что это такое?
Я знаю, что этого не должно быть сделано, но в режиме отладки с их использованием почти нет накладных расходов, что позволяет мне быстро выполнять тесты на массивных векторах.
_MyFirst - это прямой указатель, который используется самим вектором для первого элемента, и _MyLast указывает на последний элемент. Вместо использования итератора гораздо быстрее пройти через вектор, меняющий адрес памяти указателя, поэтому я их и использую. Кроме того, если вектор когда-либо изменен, то ._MyFirst и ._MyLast всегда укажут на первый и последний элементы. На linux их нет под этим именем.
Спасибо
Это массовое нестандартное. Что не так с 'vec.begin();' и 'vec.end()'? Итераторы будут просто очень тонкие обертки вокруг указателей, в любом случае, почти все, что от них зависит. (Фактически, они могут даже * быть * указателями). Существуют * стандартные способы получения указателей на данные, например ['vec.data()'] (http://en.cppreference.com/w/cpp/container/vector/data), но они могут не быть подходящим для того, что вы делаете. – BoBTFish
@bob, как предполагалось, ОП заметил, что это было быстрее ... в отладке, где итераторы имеют дополнительные проверки. Тогда не было проверки в выпуске. – Yakk
Это правильно! Поскольку я выполняю свой тест в режиме отладки и работая с облаками точек, которые имеют +600000 точек, он может стать очень медленным, поэтому использование _MyFirst и _MyLast делает меньше проверок и имеет намного меньшие накладные расходы. – user1031204