LINUX.ORG.RU

[C][C++] std::vector, итераторы и адресная арифметика


0

0

Подскажите, пжлст, почему итератор std::vector и C-шный массив ведут себя по-разному при вычитании? Казалось бы, вектор должен обладать обратной совместимостью с сишными массивами?

Код вот:

#include <vector>
#include <algorithm>
#include <utility>
#include <iostream>


using namespace std;

int main(int argc, char* argv[]) {
pair<int, int> p1 = make_pair(10, 11);
pair<int, int> p2 = make_pair(20, 21);
pair<int, int> p3 = make_pair(30, 31);
pair<int, int> p4 = make_pair(40, 41);
pair<int, int> p5 = make_pair(50, 51);

vector< pair<int, int> > v(5);
v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
v.push_back(p4);
v.push_back(p5);

cout << v.end() - v.begin() << "\n";
cout << distance(v.begin(), v.end()) << "\n\n";

pair<int, int> arr[] = {p1, p2, p3, p4, p5};
pair<int, int>* parrEnd = arr + sizeof(arr)/sizeof(pair<int, int>);
cout << parrEnd - arr << "\n";
cout << distance(arr, parrEnd) << "\n";
return 0;
}

anonymous

Re: [C][C++] std::vector, итераторы и адресная арифметика

vector< pair<int, int> > v(5);

v.push_back(p1);

v.push_back(p2);

v.push_back(p3);

v.push_back(p4);

v.push_back(p5);

Ты создал вектор из 5 эелементов и добавил еще 5. В итоге 10. Так чего же ты ждешь?

placement_new ★★ ()

Re: [C][C++] std::vector, итераторы и адресная арифметика

А на мой взгляд, Линукс вообще ацтой! Кто его пользует - мозахист!

anonymous ()

Re: [C][C++] std::vector, итераторы и адресная арифметика

> я идиот, простите =)
да и потом чтобы не кричать на каждом углу об постоянном выделении памяти используй reserve.

anonymous2 ★★★★★ ()

Re: [C][C++] std::vector, итераторы и адресная арифметика

>да и потом чтобы не кричать на каждом углу об постоянном выделении памяти используй reserve.

Да, я знаю. Просто писал какой-то тестовой пример и тут такое =/

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.