На этом шаге мы рассмотрим еще один пример использования векторов.
Ниже приведен еще один простой пример (еще один пример расположен в 5 шаге), демонстрирующий практическое применение векторов.
//--------------------------------------------------------------------------- #include <vcl.h> #include <iostream> #include <iterator> #include <vector> #include <string> #include <algorithm> #include <conio.h> //необходимо для getch() #pragma hdrstop //--------------------------------------------------------------------------- #pragma argsused using namespace std; std::string ToRus(const std::string &in) { char *buff = new char [in.length()+1]; CharToOem(in.c_str(),buff); std::string out(buff); delete [] buff; return out; } int main(int argc, char* argv[]) { // Создание пустого вектора для хранения строк vector<string> sentence; // Резервируем память для пяти элементов, // чтобы предотвратить перераспределение sentence.reserve(5); // Присоединение нескольких элементов sentence.push_back(ToRus("Привет.")); sentence.push_back(ToRus("Кто")); sentence.push_back(ToRus("пришел")); sentence.push_back(ToRus("сюда")); sentence.push_back("?"); // Вывод элементов, разделенных пробелами copy (sentence.begin(), sentence.end(), ostream_iterator<string>(cout," ")); cout << endl; // Вывод "служебных данных" cout << " max_size(): " << sentence.max_size() << endl; cout << " size(): " << sentence.size() << endl; cout << " capacity(): " << sentence.capacity() << endl; // Перестановка второго и четвертого элемента swap (sentence[1],sentence[3]); // Вставка элемента "сейчас" перед элементом "?" sentence.insert (find(sentence.begin(),sentence.end(),"?"), ToRus("сейчас")); // Присваивание "!" последнему элементу sentence.back() = "!"; // Вывод элементов, разделенных пробелами copy (sentence.begin(), sentence.end(), ostream_iterator<string>(cout," ")); cout << endl; // Повторный вывод "служебных данных" cout << " max_size(): " << sentence.max_size() << endl; cout << " size(): " << sentence.size() << endl; cout << " capacity(): " << sentence.capacity() << endl; cout << endl; getch(); return 0; } //---------------------------------------------------------------------------
Результат выполнения программы выглядит примерно так:
Рис.1. Результат работы приложения
Обратите внимание на формулировку "примерно так". Значения max_size() и capacity() зависят от реализации. Например, в данном случае видно, что если вектор не помещается в зарезервированной памяти, реализация удваивает его емкость.
На следующем шаге мы рассмотрим класс vector<bool>.