Форум программистов, компьютерный форум, киберфорум
Наши страницы

вектор алгоритм erase - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ operator= возврат значения и просто ссылки http://www.cyberforum.ru/cpp-beginners/thread809011.html
Здорова господа! Снова пытаюсь чуток в С++ разобраться, с перегрузкой операций, снова ничерта непонятно. от допустим класс class S { int b; S& operator=(const S a) {
C++ Работа с классами. Найти сумму элементов каждой строки матрицы Здравствуйте. Помогите, пожалуйста, написать следующую программу: Создайте класс в соответствии с условием задачи. Определите функции-члены класса для вывода реализации требуемых действий. Задача:... http://www.cyberforum.ru/cpp-beginners/thread809004.html
strrok_s C++
Есть код, компилятор (вижуал студио 2010) не выдает ошибок и варнингов. В определенный момент просто пишет, что работа программы прикращена, что не так можете пожалуйста взглянуть, подозреваю, что...
Программа if-else (координаты и радиус круга) C++
Здравствуйте! Необходимо написать программу: пользоатель вводит 2 координаты и радиус круга, программа их высчитывает и в зависимости от результата должна написать в какой четверти находится точка....
C++ Считывание текста с файла http://www.cyberforum.ru/cpp-beginners/thread808982.html
Здравствйте,нужна программа которая будет считывать текст с файла и выводить его в другой файл.Что то не выходитюПрограмма просто создает пустой файлюПомогите! #include<stdio.h> int main() {...
C++ Считывание текстового масива , русского Возможно вопрос баян и отправьте меня куда-то смотреть ответ, но я не нашёл как сделать это, мне надо считать в массив текст введённый в консоли на русском языке. вот к примеру обрывок int main... подробнее

Показать сообщение отдельно
Genn55
372 / 219 / 41
Регистрация: 26.12.2012
Сообщений: 718
22.03.2013, 22:12  [ТС]
Добрый вечер!Если можно,еще вопрос.Вот моя программка бессмысленная,с помощью erase очищаю вектор интервалами.Все что смог придумать все работает это фрагмент
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <iostream>
#include <iomanip>
#include <math.h>
#include <iterator>
#include <vector>
#include <algorithm>
#include <windows.h>
#include <numeric>
 
using namespace std;
 
int main()
{
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 
 const int size = 30;//объявляем статический массив на 30 элементов
   //и инициализируем или заполняем и сортируем
 double  A[size] ={0.25,0.28,0.3,0.315,0.335,0.355,0.38,0.4,0.45,0.5,0.53,0.56,0.6,0.63,
                 0.67,0.71,0.75,0.8,0.85,0.9,0.95,1.0,1.06,1.12,1.18,1.25,1.32,1.40,1.45,1.5};
 
 vector<double> vec( A, A + sizeof(A)/sizeof(*A) );
  double D;
  D = 1;
  cout << "Начальный массив: " << "\n\n";
  copy(vec.begin(), vec.end(), ostream_iterator<double>(cout,", ") );
  cout << "\n\n";
 //перезаписываем массив в интервале от 0.55 до 1.25
  vec.erase ( vec.begin(), vec.end() );
 for (int i = 0; i < size; i++)
     if(A[i] >= D*0.55 && A[i]<=D*1.25)
         vec.push_back (A[i]);//2)*(A[i]/2))*pi);
         cout << "Перезаполненный массив: " << "\n\n";
         copy(vec.begin(), vec.end(), ostream_iterator<double>(cout,", ") );
         cout << "\n\n";
//очистить массив от лишних элементов оставляем интервал от 0.71 до 1.12
//происходит смещение на 1 элемент влево от заданного
  cout << "Очищенный массив : "<<"\n\n";
 vector<double>::iterator dmin, dmax;
 double nmin ,nmax;
  nmax = 0.71;
  nmin = 1.12;
  dmax = find( vec.begin(), vec.end(), nmax);
  vec.erase(vec.begin(),dmax );
  dmin = find( vec. begin(), vec.end(), nmin);
  vec.erase(dmin,vec.end() );
  copy(vec.begin(), vec.end(), ostream_iterator<double>(cout,", ") );
  cout << "\n\n";
  //удаление интервала удаляется интервал от 0.8 до 1
    cout << " Массив с удаленным интервалом : "<<"\n\n";
 vector<double>::iterator dmin1, dmax1;
 double nmin1 ,nmax1;
 nmin1 = 0.8;
 nmax1 = 1;
    dmin1 = find( vec. begin(), vec.end(), 0.8);
    dmax1 = find( vec.begin(), vec.end(), 1);
    vec.erase(dmin1,dmax1 );
    copy(vec.begin(), vec.end(), ostream_iterator<double>(cout,", ") );
    cout << "\n\n";
//очистить массив
    cout << "Удаленный массив : "<<"\n\n";
    vec.erase ( vec.begin(), vec.end() );
    copy(vec.begin(), vec.end(), ostream_iterator<double>(cout,", ") );
    cout << "\n\n";
 
return 0;
 
}
Вот этот фрагмент работает не верно
C++
1
2
3
4
5
6
7
8
9
10
11
 cout << "Очищенный массив : "<<"\n\n";
 vector<double>::iterator dmin, dmax;
 double nmin ,nmax;
  nmax = 0.71;
  nmin = 1.12;
  dmax = find( vec.begin(), vec.end(), nmax);
  vec.erase(vec.begin(),dmax );
  dmin = find( vec. begin(), vec.end(), nmin);
  vec.erase(dmin,vec.end() );
  copy(vec.begin(), vec.end(), ostream_iterator<double>(cout,", ") );
  cout << "\n\n";
Происходит сдвиг на 1 элемент влево исправить я так и не смог.Я понимаю,что нумерация элементов идет с 0.Но ведь я же указываю на сам элемент а не на его номер.Пробовал принудительно смещать толку нет.В чем то я ошибаюсь или чего то не правильно понял.Пожалуйста подскажите.
И еще по алгоритмам.Есть ли такой алгоритм сложения в векторе сложить каждый элемент с каждым элементом или составлять свой?Пример последовательность 1, 2, 3.Всех комбинаций будет 9. 1+1,1+2,1+3,2+1,2+2,2+3 и т.д Те что я нашел либо дают всю сумму вектора ,либо слаживают вектора.
Спасибо.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru