Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Romantikkk
0 / 0 / 8
Регистрация: 19.10.2012
Сообщений: 144
#1

Последовательные контейнеры. Векторы - C++

07.10.2013, 00:29. Просмотров 1126. Ответов 15
Метки нет (Все метки)

Помогите, пожалуйста, как в изначально пустой вектор вставить 100 элементов путем вставки в СЛУЧАЙНУЮ ПОЗИЦИЮ. Случайная позиция генерируется каждый раз заново при вставке очередного элемента.
И аналогичное для удаления...

я тут написал код, но он, почему-то не работает(

Заранее спасибо.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <Vector>
//
int main(){
vector< int > V3;
    for ( int i = 0; i < 100; ++i )
        V1.insert(rand() % i, rand() % 10);
   
         cout<<"_______"<<endl;
         for ( int i = 0; i < 100; ++i )
        V1.erase(rand() % i);
         cout<<"_______"<<endl;
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2013, 00:29
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Последовательные контейнеры. Векторы (C++):

Последовательные контейнеры
Помогите, пожалуйста, с такой задачкой. Есть выполненная работа, но выводит...

Последовательные контейнеры: вектор
Какие виды векторов позволяют создать конструкторы? желательно с примером

Последовательные контейнеры. Списки
Помогите, пожалуйста, как реализовать вставку 100 элементов в список, в...

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

STL. Итераторы и последовательные контейнеры
Немогу решить эти задачки: 1 Написать экземпляр класса queue на основе...

Что лучше: динамические массивы, векторы, списки, map контейнеры или что-то ещё?
Привет всем! Помогите правильно алгоритм выбрать. Надо получать из файлов...

15
XRuZzz
Антикодер
1489 / 647 / 36
Регистрация: 15.09.2012
Сообщений: 2,635
07.10.2013, 00:41 #2
вектор располагается последоватовательно в памяти, поэтому, чтоб вставить элемент в случаю позицию i, нужно создать(если ещё не создано) i+1 элемент(зарезервировать место в памяти для них)

Добавлено через 1 минуту
если пользуетесь стандартной библиотекой
то
C++
1
#include <Vector>
vector пишется с маленькой.
поэтому
C++
1
2
#include <vector>
using std::vector;
а если вектор, не стандартный то где код?
1
Romantikkk
0 / 0 / 8
Регистрация: 19.10.2012
Сообщений: 144
07.10.2013, 00:46  [ТС] #3
типо так нужно вставить перед циклом???
C++
1
V1.insert(V1.begin(), rand() % 100);
но все-равно ничего не работает(
в строке
C++
1
V1.insert(rand() % i, rand() % 100);
выдает ошибку.

и там не V3, а V1
0
XRuZzz
Антикодер
1489 / 647 / 36
Регистрация: 15.09.2012
Сообщений: 2,635
07.10.2013, 00:47 #4
вы сначала мне эту строку объясните
C++
1
#include <Vector>
вы хотите вектор из стандартной библиотеки или свой подключить?
0
Romantikkk
0 / 0 / 8
Регистрация: 19.10.2012
Сообщений: 144
07.10.2013, 00:49  [ТС] #5
У меня 10 версия. она, почему-то и <Vector> , и <vector> принимает... спасибо, буду знать, что <vector> - это стандартная...)
0
XRuZzz
Антикодер
1489 / 647 / 36
Регистрация: 15.09.2012
Сообщений: 2,635
07.10.2013, 01:03 #6
потому что если бы это было стандартным вектором, то логика программы у вас такая
C++
1
2
3
4
5
6
7
8
#include <Vector>
//
int main(){
vector< int > V3;                  // Создаём вектор размерностью 0, то есть программа знает, что будет использован вектор, но место под сами ячейки вектора не выделено.
    for ( int i = 0; i < 100; ++i )                        // берём первую иттерацию i = 0
        V1.insert(rand() % i, rand() % 10);          // генерируется случайное число далее пытаемся взять остаток деления на 0, это возможно?
// если бы это было возможно, то мы пытались бы добавить в позициюn rand()%  0 число от 0 до 9
// которой не существует так как вектор пустой
хотя возможно вектор автоматически умеет заполнять себя до позиции rand() % 0
но в стандартной библиотеке insert работает по другому http://www.cplusplus.com/reference/vector/vector/insert/
0
Romantikkk
0 / 0 / 8
Регистрация: 19.10.2012
Сообщений: 144
07.10.2013, 01:04  [ТС] #7
хорошо, а как тогда надо, объясните и покажите, пожалуйста.
0
XRuZzz
Антикодер
1489 / 647 / 36
Регистрация: 15.09.2012
Сообщений: 2,635
07.10.2013, 01:14 #8
а не знаю на самом деле как у вас "Vector" в студии работает(и знать не хочу), это не vector из стандартной библиотеки C++
пусть специалисты по MS разбираются
но для начала убрать остаток от деления на 0 из кода

Добавлено через 5 минут
стоит добавить, что в стандартной библиотеке C++ у vector-а первый параметр это всегда итератор. Итератор это не просто номер позиции это сложный класс, который тоже нужно изучать вместе с vector-ом.(ссылку с примером я вам дал)
+wiki можно почитать Vector C++
0
I.M.
566 / 549 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
07.10.2013, 01:17 #9
Romantikkk, до цикла у пустого вектора вызываете push_back(какое_то_случайное_число)
затем запускаете цикл, но позицию для вставки выбираете как %vec.size(). Т.е. остаток от деления на размер вектора
0
XRuZzz
Антикодер
1489 / 647 / 36
Регистрация: 15.09.2012
Сообщений: 2,635
07.10.2013, 01:23 #10
ну да, дельная подсказка, на месте ТС плюсанул бы.
но я думал просто инициализировать так для начала
C++
1
vector< int > V3(100);
раз ему нужно 100 элементов, и чтоб память не перераспределялась при вставке.
Я ещё не сказал в случае когда нужно добавлять элемент в произвольное место, используются list, map и т. п.
0
Romantikkk
0 / 0 / 8
Регистрация: 19.10.2012
Сообщений: 144
07.10.2013, 01:23  [ТС] #11
типо так?
C++
1
2
3
V3.push_back( 1 + rand() % 10 );
    for ( int i = 0; i < N-1; ++i )
        V3.insert(rand() %vec.size(), rand() % 100);
не работает( те же ошибки.
0
XRuZzz
Антикодер
1489 / 647 / 36
Регистрация: 15.09.2012
Сообщений: 2,635
07.10.2013, 01:36 #12
Цитата Сообщение от Romantikkk Посмотреть сообщение
не работает( те же ошибки.
либо не почитали про итераторы, либо не знаете как ваш "Vector" работает.

Добавлено через 3 минуты
неужели такой код не подойдёт?
C++
1
2
3
4
5
6
7
int main()
{
size_t sizeV = 100;
vector< int > V3(sizeV);
    for ( int i = 0; i < sizeV; ++i )
        V1[rand() % sizeV] = rand() % 10;
}
Добавлено через 1 минуту
вы же всё равно итераторами не умеете манипулировать
0
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
07.10.2013, 01:39 #13
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <vector>
using namespace std;
 
int main()
{
    int N = 100;
    vector< int > V3;
    V3.push_back( 1 + rand() % 10 );
    for ( int i = 0; i < N - 1; ++i )
        V3.insert(V3.begin() + rand() % V3.size(), rand() % 100);
   
    cout<<"_______"<<endl;
        
    for ( int i = 0; i < N; ++i )
        cout << V3[i] << ' ';
    cout << endl;
    
    return 0;
}
0
XRuZzz
Антикодер
1489 / 647 / 36
Регистрация: 15.09.2012
Сообщений: 2,635
07.10.2013, 01:42 #14
ну да, но зачем издеваться над памятью для меня осталось загадкой
0
rangerx
1941 / 1550 / 478
Регистрация: 31.05.2009
Сообщений: 2,913
07.10.2013, 03:34 #15
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <cstddef>
#include <ctime>
#include <cstdlib>
#include <vector>
#include <iostream>
 
using namespace std;
 
int main()
{
    size_t const n = 100;
 
    vector<int> vec;
    vec.reserve(n);
 
    srand(time(NULL));
    for(size_t i = 1; i <= n; ++i)
      vec.insert(vec.begin() + std::rand() % i, i);
 
    for(size_t i = 0; i < vec.size(); ++i)
      std::cout << vec[i] << '\n';
}
1
XRuZzz
Антикодер
1489 / 647 / 36
Регистрация: 15.09.2012
Сообщений: 2,635
07.10.2013, 09:23 #16
решение rangerx скорее всего оптимальное, если следовать странноватым условиям задачи ТС.
0
07.10.2013, 09:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2013, 09:23
Привет! Вот еще темы с решениями:

последовательные классы
Составить программу, используя последовательные классы стандартной библиотеки...

Последовательные контейнерные классы
Составить программу, используя последовательные классы стандартной библиотеки...

Продублировать последовательные триады элементов исходного вектора
Помогите решить задачу. Реализуйте следующее преобразование вектора : при...

контейнеры С++
Задача:заполнить массив четными числами ,а множество – нечетными,с пом. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru