Форум программистов, компьютерный форум CyberForum.ru

vector, list, deque - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ поиска по строке Кнута-Морриса-Пратта http://www.cyberforum.ru/cpp-beginners/thread654429.html
но при компилировании выдает ошибку #include <iostream> #include <string.h> #include <time.h> #include <stdlib.h> using namespace std; int algorithm_KMP (char s, char q)
C++ доработать вот программа #include <stdio.h> #include <math.h> #include <iostream> typedef double (*Pfun)(const double, const double ); double cosh (const double x , const double eps); double a; int n,d; void printtabl (Pfun, const double Xn, const double Xk, const double dX, const double eps); int main(){ double Xn, Xk, dX, eps; http://www.cyberforum.ru/cpp-beginners/thread654426.html
C++ Присвоить целой переменной day целое значение 1,2, …, 6 или 7
Пусть n - целое число от 1 до 365. Присвоить целой переменной day целое значение 1,2, …, 6 или 7 в зависимости от того, на какой день недели (понедельник, вторник, …, субботу или воскресенье) приходится n-й день не високосного года, в котором первое января – понедельник. Если записать как day=n%7 то это подходит для всех чисел кроме кратных 7. т.е. при вводе чисел 7,14 и т.д. должно...
Если в строке левая и правая скобки идут рядом, удалить их из строки C++
Сгенерировать строку, длиной в 256 символов, которая состоит из случайной последовательности скобок разных видов: круглых, квадратных и фигурных. Проанализировать строку, и если в ней левая и права скобки одного вида идут рядом,удалить их из строки. Повторяйте процедуру, пока это возможно.
C++ класс Chess http://www.cyberforum.ru/cpp-beginners/thread654394.html
помогите пожалуйста разработать класс Chess. попробывал не получилось нужно его разработать под #include "ConsoleDrawHelper.h" ConsoleDrawHelper::ConsoleDrawHelper() : CellXSize(12), CellYSize(8), VerticalStandoff(0), HorizontalStandoff(0) { this->hOut = ::GetStdHandle(STD_OUTPUT_HANDLE); const COORD WindowSize = {150, 80}; // width and hight of the window
C++ setiosflags(ios::left) Почему setiosflags(ios::right) выравнивает числа по правой стороне а setiosflags(ios::left) не выравнивает по левой? for (int n=1; n<=10; n++) { int cube = n * n * n; cout << setw(2) << setiosflags(ios::right) << n; cout << setw(6) << setiosflags(ios::left) << cube << endl; // Не выравниваются цифры по левой стороне } подробнее

Показать сообщение отдельно
AnreyKazakov
Заблокирован
19.09.2012, 15:04     vector, list, deque
Пытаюсь разобраться, куда лучше какой контейнер применять, под какие задачи. Первый вопрос по списку:
Сказано, что список удаляет любой элемент без потери скорости, это значит, что спиок через n-ое количество удалений list великолепно фрагментирует память? как потом эти дыры заполняются если список остается неизменным?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <list>
#include <iterator>
#include <string>
using std::cout;using std::cin;using std::endl; using std::string;
using std::getline;using std::list;
void see(list<string>::iterator ix,list<string>::iterator ixe){
    while(ix!=ixe){cout<<*ix<<" ";++ix;}
    }
int main(){
    string str;
    list<string> list1;
    while(getline(cin,str))list1.push_back(str);
    cin.clear();
    see(list1.begin(),list1.end());
    list<string>::iterator iter, contriter;
    cout<<"Введите слово, которое необходимо удалить"<<endl;
    cin>>str;
    contriter=iter=find(list1.begin(),list1.end(),str);/*ставим итератор на удаляемый элемент*/
    if(iter!=list1.end())list1.erase(iter);/*удаляем элемент*/
//cout<<"удален элемент - "<<*contriter<<" "<<endl; - опасный тип
    list1.push_back("end_element");/*добавляем элемент в конец вектора*/
    see(list1.begin(),list1.end());
    cout<<"удален элемент - "<<*contriter<<" "<<endl;/*итератор указывет на добавленный объект...*/
    return 0;
    }
Т.е. после удаления и добавления объекта итератор будет = list1.push_back() минус 1. (сразу после удаления он мусор выкидывает какой-то...)
Получается, что вроде контейнер заполнен последовательно, а в памяти список хранится как попало....
Самое непонятное, это что такое deque, если очередь хранит элементы в стиле списка, зачем ему нужно смещать при удалении все элементы? Т.е у очереди если сразу после удаления обратиться к итератору он покажет на след элемент, но тогда можно использовать вектор, зачем париться...
Конечно, плюс большой списка, что при удалении объекта с центра, кроме скорости исполнения =) еще и в том, что итераторы остаются актуальными, кроме итератора, указвающего на удаленный объект...
deque так и не понял, он тоже в памяти фрагментированл валяется? Если так, то скорость доступа к его элементам намного ниже чем у вектора... Вот такие вопросы......
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 10:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru