Я написал следующий простой пример:Понимания итератора для станда :: вектор
#include<iostream>
#include<vector>
int main()
{
int arr[] = {1, 2, 4, 7, 10};
std::vector<int> vect;
vect.assign(arr, arr + 5);
for(std::vector<int>::iterator it = vect.begin(); it != vect.end(); ++it)
{
std::cout << *it << std::endl;
}
std::cout << "-------------------------------------" << std::endl;
for(std::vector<int>::iterator it = vect.begin(); it != vect.end(); ++it)
{
std::cout << *it << std::endl;
}
}
И оба две петли печатают же. Мой вопрос в том, насколько он надежный? Итерации по вектору возвращают элементы в одном порядке каждый раз? Я имею в виду, он стандартизирован или некоторые реализации разрешены для итерации по вектору в другом порядке. Например, мы перебирать вектора для firt времени следующим образом:
for(std::vector<int>::iterator it = vect.begin(); it != vect.end(); ++it)
{
std::cout << *it << std::endl;
}
и получить выход
1
2
4
7
10
Хотя, итерация во второй раз произвести вывод:
2
10
1
4
7
Возможно ли это для некоторой реализации?
является ли он надежным ?: до тех пор, пока содержимое контейнера STL не изменится, вы получите тот же результат каждый раз, когда вы его итерации , Это гарантированное поведение. – 101010
Нет, я так не думаю, что эти векторы будут внутренне реализованы как массивы или LinkedList - в основном массивы (изменяемые по размеру) и попытка сделать что-то, что меняется каждый раз, трудно реализовать. Если вы этого не хотите! :) В этом случае вы пишете свое! :) – gabhijit
Является ли выход действительно другим? Я запустил ваш код на [CodeChef IDE] (http://www.codechef.com/ide), и результат такой же. – anshabhi