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

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

Восстановить пароль Регистрация
 
Romantikkk
0 / 0 / 0
Регистрация: 19.10.2012
Сообщений: 144
07.10.2013, 00:29     Последовательные контейнеры. Векторы #1
Помогите, пожалуйста, как в изначально пустой вектор вставить 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2013, 00:29     Последовательные контейнеры. Векторы
Посмотрите здесь:

последовательные классы C++
C++ Последовательные контейнерные классы
последовательные контейнеры. вектор C++
Контейнеры с++ C++
Последовательные контейнеры. Списки C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
07.10.2013, 00:41     Последовательные контейнеры. Векторы #2
вектор располагается последоватовательно в памяти, поэтому, чтоб вставить элемент в случаю позицию i, нужно создать(если ещё не создано) i+1 элемент(зарезервировать место в памяти для них)

Добавлено через 1 минуту
если пользуетесь стандартной библиотекой
то
C++
1
#include <Vector>
vector пишется с маленькой.
поэтому
C++
1
2
#include <vector>
using std::vector;
а если вектор, не стандартный то где код?
Romantikkk
0 / 0 / 0
Регистрация: 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
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
07.10.2013, 00:47     Последовательные контейнеры. Векторы #4
вы сначала мне эту строку объясните
C++
1
#include <Vector>
вы хотите вектор из стандартной библиотеки или свой подключить?
Romantikkk
0 / 0 / 0
Регистрация: 19.10.2012
Сообщений: 144
07.10.2013, 00:49  [ТС]     Последовательные контейнеры. Векторы #5
У меня 10 версия. она, почему-то и <Vector> , и <vector> принимает... спасибо, буду знать, что <vector> - это стандартная...)
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
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/v...vector/insert/
Romantikkk
0 / 0 / 0
Регистрация: 19.10.2012
Сообщений: 144
07.10.2013, 01:04  [ТС]     Последовательные контейнеры. Векторы #7
хорошо, а как тогда надо, объясните и покажите, пожалуйста.
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
07.10.2013, 01:14     Последовательные контейнеры. Векторы #8
а не знаю на самом деле как у вас "Vector" в студии работает(и знать не хочу), это не vector из стандартной библиотеки C++
пусть специалисты по MS разбираются
но для начала убрать остаток от деления на 0 из кода

Добавлено через 5 минут
стоит добавить, что в стандартной библиотеке C++ у vector-а первый параметр это всегда итератор. Итератор это не просто номер позиции это сложный класс, который тоже нужно изучать вместе с vector-ом.(ссылку с примером я вам дал)
+wiki можно почитать Vector C++
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
07.10.2013, 01:17     Последовательные контейнеры. Векторы #9
Romantikkk, до цикла у пустого вектора вызываете push_back(какое_то_случайное_число)
затем запускаете цикл, но позицию для вставки выбираете как %vec.size(). Т.е. остаток от деления на размер вектора
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
07.10.2013, 01:23     Последовательные контейнеры. Векторы #10
ну да, дельная подсказка, на месте ТС плюсанул бы.
но я думал просто инициализировать так для начала
C++
1
vector< int > V3(100);
раз ему нужно 100 элементов, и чтоб память не перераспределялась при вставке.
Я ещё не сказал в случае когда нужно добавлять элемент в произвольное место, используются list, map и т. п.
Romantikkk
0 / 0 / 0
Регистрация: 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);
не работает( те же ошибки.
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
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 минуту
вы же всё равно итераторами не умеете манипулировать
alsav22
5282 / 4801 / 442
Регистрация: 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;
}
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
07.10.2013, 01:42     Последовательные контейнеры. Векторы #14
ну да, но зачем издеваться над памятью для меня осталось загадкой
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
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';
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2013, 09:23     Последовательные контейнеры. Векторы
Еще ссылки по теме:

C++ STL. Итераторы и последовательные контейнеры
C++ Что лучше: динамические массивы, векторы, списки, map контейнеры или что-то ещё?
Продублировать последовательные триады элементов исходного вектора C++

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

Или воспользуйтесь поиском по форуму:
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
07.10.2013, 09:23     Последовательные контейнеры. Векторы #16
решение rangerx скорее всего оптимальное, если следовать странноватым условиям задачи ТС.
Yandex
Объявления
07.10.2013, 09:23     Последовательные контейнеры. Векторы
Ответ Создать тему
Опции темы

Текущее время: 16:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru