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

Не может удалить элемент из вектора - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Определить класс для рациональных чисел http://www.cyberforum.ru/cpp-beginners/thread664491.html
Начало изучения понятия класса и объекта в С++, для меня много не ясного. Помогите, пожалуйста. Задача: необходимо Определить класс (Rational) для рациональных чисел. Рациональное число - число...
C++ не проходит инцилизация вектора #include <iostream> #include <vector> #include <ctime> // function RandomInitializationVector void PrintElementVector(std::vector <int> vector); void RandomInitializationVector(std::vector... http://www.cyberforum.ru/cpp-beginners/thread664480.html
C++ Программа, которая помогает найти число х между 0 и 1000
Программа, которая помогает найти число х между 0 и 1000. Это число х выбирается программой. Использовать функцию rand. Когда вводишь число, программа должна сказать "слишком большое" или "слишком...
Вектор C++
Заполните вектор случайными числами. Напишите вывод на экран. Отсортируйте вектор. Напишите функцию, которая удалит из вектора все простые числа. Напишите функцию, которая копирует все простые...
C++ Вычислить значение функции http://www.cyberforum.ru/cpp-beginners/thread664425.html
Ребят помогите написать код двух задач. Задача 1 Роздилите абитуриентов, что выдержали конкурс, между двумя группами с ближайшим количественным составом. Задача 2 Заданно значение функции...
C++ Как правильно обьявить геометрические точки? Здраствуйте! Задача стоит такая : Добавить геометрическую точку с указанными координатами. (х у) Отсортировать геометрические точки в сторону увеличения расстояния от начала координат. Теперь... подробнее

Показать сообщение отдельно
KostyaKulakov
Заблокирован

Не может удалить элемент из вектора - C++

06.10.2012, 09:42. Просмотров 1349. Ответов 12
Метки (Все метки)

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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
#include <iostream>
#include <vector>
#include <ctime> // function RandomInitializationVector
#include <algorithm>
 
void PrintElementVector(std::vector <int> vector);
void RandomInitializationVector(std::vector <int> &vector, int size);
bool Resheto_Atkina(int number);
void DeletePrimes( std::vector<int> & vec );
void primes_up(std::vector <int> &vector1, std::vector <int> &vector2);
 
int main()
{
    std::cout << "Test Vector" << std::endl << std::endl;
 
    //std::vector <type> name; //здесть type - тип данных в векторе, а name - имя вектора
 
    std::vector <int> test;
 
    std::cout << "initialization vector \"test\" " << std::endl << std::endl;
 
    RandomInitializationVector(test, 10);
 
    PrintElementVector(test);
 
    std::cout << "\nGo to Sort vector! Please push key" << std::endl;
 
    std::cin.get();
    
    system("cls");
 
    std::sort(test.begin(), test.end());
 
    PrintElementVector(test);
 
    std::cout << "\nGo to Copy vector! Please push key" << std::endl;
 
    std::cin.get();
    
    system("cls");
 
    std::vector <int> test2;
 
    primes_up(test, test2);
 
    auto size = test.size();
 
    PrintElementVector(test2);
 
    std::cout << "\nGo to Removal of primes in vector! Please push key" << std::endl;
 
    std::cin.get();
    
    system("cls");
 
    DeletePrimes(test);
 
    PrintElementVector(test);
}
 
void RandomInitializationVector(std::vector <int> &vector, int size)
{
    srand(time(0));
 
    for(int i=0; i < size; ++i)
        vector.push_back(rand() % 999);
}
 
void PrintElementVector(std::vector <int> vector)
{
    auto size = vector.size();
 
    for(int i=0; i < size; ++i)
        std::cout << "vector[" << i << "] : " << vector[i] << std::endl;
}
 
void primes_up(std::vector <int> &vector1, std::vector <int> &vector2)
{
    auto size = vector1.size();
 
    int cnt=0;
 
    for(int i=0; i < size; ++i)
    {
        if(Resheto_Atkina(vector1[i]))
            vector2.push_back(vector1[i]);
    }
            
}
 
void DeletePrimes(std::vector<int> &vec)
{
  size_t i, place = 0, limit = vec.size();
 
  for (i = 0; i < limit; ++i) 
  {
     if(Resheto_Atkina(vec[i]))
     {
        vec.erase(vec.begin() + i);
     }
  }
}
 
bool Resheto_Atkina(int number) // [url]http://ru.wikipedia.org/wiki/Решето_Аткина[/url]
{
    int limit = 1000;
    int sqr_lim;
    bool is_prime[1001];
    int x2, y2;
    int i, j, n;
 
    // Инициализация решета
    sqr_lim = (int)sqrt((long double)limit);
    for (i = 0; i <= limit; i++) is_prime[i] = false;
    is_prime[2] = true;
    is_prime[3] = true;
 
    // Предположительно простые - это целые с нечетным числом
    // представлений в данных квадратных формах.
    // x2 и y2 - это квадраты i и j (оптимизация).
    x2 = 0;
    for (i = 1; i <= sqr_lim; i++) {
        x2 += 2 * i - 1;
        y2 = 0;
        for (j = 1; j <= sqr_lim; j++) {
            y2 += 2 * j - 1;
 
            n = 4 * x2 + y2;
            if ((n <= limit) && (n % 12 == 1 || n % 12 == 5))
                is_prime[n] = !is_prime[n];
 
            // n = 3 * x2 + y2; 
            n -= x2; // Оптимизация
            if ((n <= limit) && (n % 12 == 7))
                is_prime[n] = !is_prime[n];
 
            // n = 3 * x2 - y2;
            n -= 2 * y2; // Оптимизация
            if ((i > j) && (n <= limit) && (n % 12 == 11))
                is_prime[n] = !is_prime[n];
        }
    }
 
    // Отсеиваем кратные квадратам простых чисел в интервале [5, sqrt(limit)].
    // (основной этап не может их отсеять)
    for (i = 5; i <= sqr_lim; i++) {
        if (is_prime[i]) {
            n = i * i;
            for (j = n; j <= limit; j += n) {
                is_prime[j] = false;
            }
        }
    }
 
    if(number == 2 || number == 3 || number == 5)
        return true;
 
    for (i = 6; i <= limit; i++) {  // добавлена проверка делимости на 3 и 5. В оригинальной версии алгоритма потребности в ней нет.
        if ((is_prime[i]) && (i % 3 != 0) && (i % 5 !=  0))
        {
 
           if(i == number)
               return true;
        }
 
        }
     return false;
}
DeletePrimes не получается удалить. проблема в том что вылетает программа.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru