Void main(). ifstream in ("text.txt");
{
ifstream in ("text.txt");
vector<int> v;
int x;
while (!in.eof(), in >> x)
v.push_back(x);
for (vector<int>::iterator i=v.begin(); i!=v.end(); ++i)
cout << *i << " ";
}
Оскільки файл містить цілі числа, використовується відповідна спеціалізація шаблону vector – vector<int>. Для створення вектора v використовується конструктор за умовчанням. Організовується цикл до кінця файлу, в якому з нього зчитується чергове ціле число. За допомогою методу push_back воно заноситься у вектор, розмір якого збільшується автоматично. Для проходу по всьому вектору вводиться змінна iяк ітератор відповідного типу тобто тут оголошується змінна iтипу "ітератор". За допомогою цього ітератора здійснюється доступ до всіх по порядку елементам контейнера, починаючи з першого. Метод begin() повертає вказівку на перший елемент, метод end() – на елемент, наступний за останнім. Порівнювати поточне значення з граничним слід саме за допомогою операції "!=", оскільки операції "<" або "<=" можуть бути для даного типу не визначені. Операція інкременту (++i) реалізована так, щоб після неї ітератор вказує на наступний елемент контейнера в порядку обходу. Доступ до елементу вектора виконується за допомогою операції розадресації, як для звичайних вказівок. У даному прикладі замість вектора можна було використовувати будь-який послідовний контейнер шляхом простої заміни слова vector наdeque абоlist. При цьомузмінилося б внутрішнє представлення даних і набір доступних операцій. Приведені операції в прикладі використовуються для будь-якого послідовного контейнера. Проте якщо замість циклу for вставити фрагмент
for (int i = 0; i<v.size(); i++) cout << v[i] << " ";
у якому використана операція доступу по індексу [ ], програма не працюватиме для контейнера типу list,оскільки в ньому ця операція не визначена.
Дата добавления: 2014-12-26; просмотров: 647;