русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Редактирование данных в ячейке


Дата добавления: 2013-12-23; просмотров: 903; Нарушение авторских прав


Класс list

Класс string

Класс vector

Обзор библиотеки STL

Часть работы по стандартизации C++ направлена на определение стандартного множества классов и библиотек для всех компиляторов С++, удовлетворяющих стандарту ANSI C++. В настоящее время такое множество классов и библиотек известно под именем стандартной библиотеки шаблонов (standard template library, STL). STL включает такие классы, как:

· контейнеры – это вспомогательные объекты, содержащие другие объекты

ü vector (динамический массив)

ü queue (очередь)

ü list (линейный список)

ü stack (стек)

ü string (строка)

ü и другие.

· алгоритмы

ü заполнение элементов контейнера инициализирующими значениями или множеством значений

ü поиск значений среди элементов контейнера

ü проверка элементов двух контейнеров на попарное равенство

ü и другие.

· итераторы – объекты, предоставляющие возможности манипуляции элементами контейнеров

Из самого названия библиотеки STL следует, что ее компоненты – шаблоны, в основном шаблонные классы. Основные элементы STL – контейнеры, они представляют собой обобщенные понятия, поэтому реализация их в виде параметризованных классов позволяет достичь максимально возможной гибкости.

В последующих разделах будут рассмотрены три контейнерных класса – vector, string и list – основные функции и принципы работы с ними. Чтобы использовать классы STL в программе необходимо подключить соответствующие заголовочные файлы и использовать пространство имен std. Пространство имен – это множество идентификаторов, невидимых программой без явного его объявления. Для этого используется инструкция using namespace. Например, чтобы программе был доступен класс vector, следует записать:



#include <vector>

using namespace std;

Обратите внимание, что имя заголовочного файла vector не имеет расширения – это отличительная особенность всех заголовочных файлов STL. Для работы с классами string и list следует включить следующие файлы соответственно:

#include <string>

#include <list>

Подключить пространство имен std достаточно только один раз.

Класс vector представляет собой реализацию класса динамического массива в виде шаблона, т.е. vector – это динамический массив, способный хранить данные любого типа. Рассмотрим пример, в котором объявляется вектор переменных типа int.

#include <vector>

using namespace std;

void main()

{

vector<int> v;

}

Здесь объявление vector<int> v; создает объект v, имеющий тип “вектор переменных типа int”.

С объектами-векторами можно работать различными способами. Один из вариантов – заполнение вектора некоторыми значениями, добавляя их в конец вектора. Такую операцию выполняет функция-член push_back(). При этом возможно перевыделение памяти внутри вектора.

#include <vector>

#include <iostream.h>

using namespace std;

void main()

{

vector<int> v;

v.push_back(1);

if(v.size() != 0) cout << "Last element: " << v.back() << endl;

v.push_back(2);

if(v.size() != 0) cout << "New last element: " << v.back() << endl;

}

Эта программа выводит:

Last element: 1

New last element: 2

В данном примере объявляется объект v – вектор переменных типа int. Затем в конец вектора помещается значение 1 (на самом деле оно становится первым значением), после чего выводится на экран. Функция-член size() возвращает число элементов вектора и используется здесь для проверки успешности добавления в вектор нового элемента. Функция-член back() возвращает ссылку на последний элемент вектора (в данном случае это все та же 1).

После этого в конец вектора добавляется элемент 2 и ситуация повторяется.

При работе с данными большого объема использование только функции push_back нежелательно, поскольку это приводит к частому перевыделению памяти, что снижает скорость работы программы. В таких случаях полезно предварительно заставить вектор выделить необходимый объем памяти заранее. Для этого следует использовать функцию-член reserve().

#include <vector>

#include <iostream.h>

using namespace std;

void main()

{

vector<int> v;

v.push_back(1);

cout << "Current capacity of v = " << v.capacity() << endl;

v.reserve(20);

cout << "Current capacity of v = " << v.capacity() << endl;

}

Вывод программы следующий:

Current capacity of v = 1

Current capacity of v = 20

Функция-член capacity() возвращает число элементов, под которые память выделена на данный момент емкость вектора. В общем случае емкость превосходит или совпадает с числом элементов, хранящихся в векторе. После вызова v.reserve(20) в примере выше емкость вектора равна 20, хотя хранится в нем по-прежнему один элемент – 1. Кроме всего прочего пример демонстрирует, что функция push_back() приводит к возрастанию емкости на единицу, т.е. перевыделение памяти происходит при каждом вызове этой функции.

При работе с вектором необходимо каким-то образом получать доступ к элементам, хранящимся в векторе. Для этого класс vector определяет оператор индексации [].

#include <vector>

#include <iostream.h>

using namespace std;

int main()

{

vector<int> v;

v.push_back(10);

v.push_back(20);

int i = v[1];

cout << "The second element of v is " << i << endl;

}

Вывод программы:

The second element of v is 20

Оператор [] возвращает ссылку на элемент вектора, поэтому оператор индексации может стоять слева от оператора присваивания. Другими словами, с помощью индексации также можно присваивать значения элементам вектора.

Другие полезные функции-члены класса vector:

· clear() – очищает вектор, т.е. удаляет все хранящиеся в нем элементы;

· empty() – возвращает истину, если в векторе нет элементов, т.е. если он пустой;

· front() – возвращает ссылку на первый элемент вектора;

· pop_back() – удаляет последний элемент вектора.

Класс string представляет собой реализацию класса строки. По очевидным причинам он не является шаблонным классом – строка состоит из символов, поэтому объявление типа в качестве параметра здесь не требуется.

Класс string определяет ряд операторов, представляющих типичные операции, выполняемые над строками. В число этих операторов входят:

· operator<< - оператор вставки строки в поток вывода – предназначен для вывода строк на экран, в файлы и т.д.;

· operator>> - оператор извлечения строки из потока ввода – предназначен для ввода строк с клавиатуры, чтения из файлов и т.д.;

· operator= - оператор присваивания строк;

· operator+ - оператор сложения (конкатенации) двух объектов string, объекта string с обычной строкой языка C, т.е. char*, и объекта string с одиночным символом;

· operator<, operator>, operator<=, operator>=, operator==, operator!= - операторы сравнения строк.

Рассмотрим примеры, иллюстрирующие использование объектов класса string и его операторов.

#include <string>

#include <iostream.h>

using namespace std;

void main()

{

string message = "Hello! This is the insertion operator.";

cout << message << endl;

}

Вывод программы:

Hello! This is the insertion operator.

В этой программе объявляется объект message класса string и инициализируется строкой при объявлении. Затем строка выводится на экран с использованием оператора <<.

Следующий пример:

#include <string>

#include <iostream.h>

using namespace std;

void main()

{

string s;

cout << "Enter a word: ";

cin >> s;

cout << "You entered: " << s << endl;

}

Пример ввода/вывода программы:

Enter a word: test

You entered: test

Здесь объявляется строка s, но не инициализируется. Затем используется оператор >> для ввода значения строки с клавиатуры, после чего содержимое строки выводится на экран с помощью оператора <<.

Пример на сложение и присваивание строк:

#include <string>

#include <iostream.h>

using namespace std;

void main()

{

string result;

string s1 = "ABC";

string s2 = "DEF";

char cp1[] = "GHI";

char c = 'J';

 

cout << "s1 is " << s1 << endl;

cout << "s2 is " << s2 << endl;

cout << "cp1 is " << cp1 << endl;

cout << "c is " << c << endl;

 

result = s1 + cp1; // Сложение string и char* (result = “ABCGHI”)

cout << "s1 + cp1 is " << result << endl;

 

result = cp1 + s1; // Сложение char* и string (result = “GHIABC”)

cout << "cp1 + s1 is " << result << endl;

 

result = s1 + s2; // Сложение двух string (result = “ABCDEF”)

cout << "s1 + s2 is " << result << endl;

 

result = s1 + c; // Сложение string и char (result = “ABCJ”)

cout << "s1 + c is " << result << endl;

 

result = c + s1; // Сложение char и string (result = “JABC”)

cout << "c + s1 is " << result << endl;

}

Вывод программы:

s1 is ABC

s2 is DEF

cp1 is GHI

c is J

s1 + cp1 is ABCGHI

cp1 + s1 is GHIABC

s1 + s2 is ABCDEF

s1 + c is ABCJ

c + s1 is JABC

В этой программе объявляются три объекта string (s1, s2, result), одна строка языка C (массив char с именем cp1) и одна символьная переменная (c). Затем демонстрируется использование оператора + для сложения объектов string с объектами string, строками языка C и отдельными символами. Результаты всех операций выводятся на экран.

Приведем еще один пример, в котором иллюстрируется использование оператора проверки на равенство. Остальные операторы сравнения используются сходным образом.

#include <string>

#include <iostream.h>

using namespace std;

void main()

{

string s1="ABC";

string s2="ABC";

string s3="DEF";

 

cout << "s1 is " << s1 << endl;

cout << "s2 is " << s2 << endl;

cout << "s3 is " << s3 << endl;

 

if(s1 == s2) cout << "s1 and s2 are equal" << endl;

else cout << "s1 and s2 are NOT equal" << endl;

 

if(s1 == s3) cout << "s1 and s3 are equal" << endl;

else cout << "s1 and s3 are NOT equal" << endl;

}

Вывод программы:

s1 is ABC

s2 is ABC

s3 is DEF

s1 and s2 are equal

s1 and s3 are NOT equal

Класс list представляет собой реализацию класса двусвязного списка в виде шаблона, т.е. list – это двусвязный список, способный хранить данные любого типа. Вообще список – это структура данных, отличающаяся от массива тем, что данные хранятся не в непрерывном участке памяти и что допускается добавление элементов во внутрь и в начало списка, т.е. не только в конец. Рассмотрим пример, в котором объявляется список переменных типа int.

#include <list>

using namespace std;

void main()

{

list<int> l;

}

Здесь объявление list<int> l; создает объект l, имеющий тип “список переменных типа int”.

Класс list имеет много общего с классом vector в плане поддерживаемых операций и имен функций-членов. С объектами-списками также можно работать различными способами. Один из вариантов – заполнение списка некоторыми значениями, добавляя их в конец списка. Такую операцию выполняет функция-член push_back().

#include <list>

#include <iostream.h>

using namespace std;

void main()

{

list<int> l;

l.push_back(1);

if(l.size() != 0) cout << "Last element: " << l.back() << endl;

l.push_back(2);

if(l.size() != 0) cout << "New last element: " << l.back() << endl;

}

Эта программа выводит:

Last element: 1

New last element: 2

В данном примере объявляется объект l – список переменных типа int. Затем в конец списка помещается значение 1 (на самом деле оно становится первым значением), после чего выводится на экран. Функция-член size() возвращает число элементов списка и используется здесь для проверки успешности добавления в список нового элемента. Функция-член back() возвращает ссылку на последний элемент списка (в данном случае это все та же 1).

После этого в конец списка добавляется элемент 2 и ситуация повторяется.

Структура данных список не требует перевыделений памяти, поэтому при работе с list можно смело использовать функцию-член push_back(), если это необходимо. По той же причине в классе list отсутствуют функции reserve() и capacity(), которые имелись в классе vector.

При работе со списком необходимо каким-то образом получать доступ к элементам, хранящимся в списке. Однако, в отличие от vector, в классе list нет оператора индексации. Это объясняется тем, что элементы списка хранятся не в непрерывном участке памяти. Для доступа к отдельным элементам класс list использует итераторы. Рассмотрим пример:

#include <vector>

#include <iostream.h>

using namespace std;

void main()

{

list<int> l;

list<int>::iterator i;

 

l.push_back(10);

l.push_back(20);

l.push_back(30);

 

cout << "The list is now:";

for(i = l.begin(); i != l.end(); i++)

cout << " " << *i;

}

Вывод программы:

The list is now: 10 400 30

В данной программе i – итератор. Обратите внимание, что он объявлен с указанием соответствующего класса. Дело в том, что итераторы зависят от типа данных, на которые они указывают. Итератор можно понимать как особый вид указателя на элемент списка. После того, как список заполнен тремя числами, его содержимое в цикле выводится на экран. Функция-член begin() возвращает итератор, указывающий на первый элемент списка. В цикле итератор i инициализируется именно этим значением. Цикл продолжается, пока итератор i не примет значение, возвращаемое функцией-членом end(), которая возвращает итератор, указывающий на элемент, следующий за последним в списке. Для навигации по элементам списка к итератору i применяется оператор ++. С помощью операции *, примененной к итератору i, обеспечивается доступ непосредственно к значению элемента списка. С помощью итераторов также можно присваивать значения элементам списка.

Как было сказано, в список можно добавлять и удалять элементы на любой позиции. Для этого используются функции-члены insert() и erase() соответственно. Рассмотрим пример на добавление элементов:

#include <iostream.h>

#include <list>

using namespace std;

void main()

{

list<int> l;

list<int>::iterator i;

 

l.push_back(10);

l.push_back(20);

l.push_back(30);

 

cout << "l =";

for(i = l.begin(); i != l.end(); i++)

cout << " " << *i;

cout << endl;

 

i = l.begin();

i++;

l.insert(i, 999);

cout << "l =";

for(i = l.begin(); i != l.end(); i++)

cout << " " << *i;

cout << endl;

}

Вывод программы:

l = 10 20 30

l = 10 999 20 30

Для указания позиции, куда будет добавлен элемент, используется итератор. Выражение i = l.begin(); присваивает i адрес первого элемента списка. Выражение i++; приводит к тому, что i теперь указывает на второй элемент списка. Поэтому при вызове функции insert() значение 999 добавляется на вторую позицию. Важно понимать, что при этом список увеличивается, т.е. элемент, ранее стоявщий вторым, теперь является третьим, третий – четвертым и т.д.

Пример с удалением элементов из списка:

#include <iostream.h>

#include <list>

using namespace std;

void main()

{

list<int> l;

list<int>::iterator i;

 

l.push_back(10);

l.push_back(20);

l.push_back(30);

l.push_back(40);

l.push_back(50);

cout << "The initial list is:";

for(i = l.begin(); i != l.end(); i++)

cout << " " << *i;

cout << endl;

 

l.erase(l.begin());

cout << "After erasing the first element, the list becomes:";

for(i = l.begin(); i != l.end(); i++)

cout << " " << *i;

cout << endl;

 

i = l.begin();

i++;

l.erase(i);

cout << "After erasing the new second element the list becomes: ";

for(i = l.begin(); i != l.end(); i++)

cout << " " << *i;

cout << endl;

}

Вывод программы:

The initial list is: 10 20 30 40 50

After erasing the first element, the list becomes: 20 30 40 50

After erasing the new second element the list becomes: 20 40 50

Для указания удаляемых из списка элементов также используются итераторы. После заполнения списка в приведенной выше программе и вывода его содержимого на экран команда l.erase(l.begin()); вызывает удаление первого элемента списка. Затем, после вывода содержимого списка на экран, пара команд i = l.begin(); i++; приводят к тому, что i указывает на второй элемент полученного списка. Команда l.erase(i); вызывает удаление этого второго элемента списка.

Другие полезные функции-члены класса list:

· clear() – очищает список, т.е. удаляет все хранящиеся в нем элементы;

· empty() – возвращает истину, если в списке нет элементов, т.е. если он пустой;

· front() – возвращает ссылку на первый элемент списка;

· push_front() – добавляет элемент в начало списка;

· pop_front() – удаляет первый элемент списка;

· pop_back() – удаляет последний элемент списка.

 

Начиная с Excel5, можно редактировать данные как в строке формул, так и непосредственно в ячейке. Для использования этой возможности необходимо установить флажок ПРАВКА ПРЯМО В ЯЧЕЙКЕ на вкладке ПРАВКА команды СЕРВИС/ПАРАМЕТРЫ. Редактирование ячейки возможно после установки в нее курсора (места вставки). Позиционировать место вставки можно двумя способами: установить указатель мыши в нужную позицию редактируемых данных ячейки и дважды щелкнуть левой клавишей или активизировать ячейку и нажать клавишу F2. Над содержанием ячейки можно выполнять все известные команды редактирования, выполняемые через буфер обмена: ПРАВКА/ВЫРЕЗАТЬ, ПРАВКА/КОПИРОВАТЬ, ПРАВКА/ВСТАВИТЬ.

Полное удаление редактируемых данных возможно также несколькими способами: удаление старых данных осуществляется при вводе новых данных, начинающимся с первой позиции; при нажатии клавиши DEL; при выполнении команды ПРАВКА/ОЧИСТИТЬ. Эта команда позволяет выбрать объект удаления:

все – удаляет содержимое ячеек, форматирование и примечания;

форматы – удаляет из ячейки только форматирование;

содержимое – удаляет из ячейки только содержимое;

примечание – удаляет только примечание, относящееся к ячейке.

Команды очистки можно выполнять над одной ячейкой или блоком ячеек.

К ячейкам рабочего листа можно добавить примечания, содержащие пояснения к вычислениям, предположения или какие-то примечания. Создание примечания выполняется командой ВСТАВКА/ПРИМЕЧАНИЕ (или нажатием клавиши СОЗДАТЬ ПРИМЕЧАНИЕ на панели инструментов ЗАВИСИМОСТИ).Появится окно примечания, в котором можно ввести сообщение. К ячейке можно присоединить только одно примечание, но его текст может быть любой длины. Если в окне примечания необходимо начать новый абзац, следует нажать Enter. С помощью маркеров изменения размеров можно менять размеры окна примечаний.

При создании нового примечания в верхней части окна полужирным шрифтом выводится имя пользователя. При выполнении команды СЕРВИС/ПАРАМЕТРЫ на вкладке ОБЩИЕ в поле ИМЯ ПОЛЬЗОВАТЕЛЯ можно ввести любой текст. Этот текст и будет появляться в верхней части окна примечаний.

Ячейка, имеющая примечание, помечается красным треугольником в правом верхнем углу. При установке указателя мыши на этом индикаторе появляется всплывающее окно примечания к ячейке. Отменить вывод на экран этого индикатора можно командой СЕРВИС/ПАРАМЕТРЫ – вкладка ВИД – переключать ПРИМЕЧАНИЕ установить в положение НЕ ОТОБРАЖАТЬ. При установке этого переключателя в положение ПРИМЕЧАНИЕ И ИНДИКАТОР в рабочем листе будут отображаться все примечания, присоединенные к ячейкам. Просмотр всех примечаний можно также выполнить командой ВИД/ПРИМЕЧАНИЯ. Команда выводит на экран все примечания и панель инструментов РЕЦЕНЗИРОВАНИЕ, облегчающую работу с примечаниями.

При редактировании в ячейке формулы Excel выделяет разноцветными рамками ячейки и диапазоны, ссылки на которые используются в формуле.



<== предыдущая лекция | следующая лекция ==>
Пример с двумя типами-шаблонами | Копирование и перемещение ячеек на рабочем листе


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.014 сек.