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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.67
Эри
1 / 1 / 0
Регистрация: 03.02.2011
Сообщений: 8
#1

Создание массива указателей на векторы - C++

03.02.2011, 13:48. Просмотров 3682. Ответов 18
Метки нет (Все метки)

Доброго времени суток!

Дано:
н-дцать векторов(библиотека STL)

Необходимо:
создать массив указателей на эти вектора с целью дальнейшего их заполнения.

Понимаю, что решение на поверхности, но собрать мосх в кучу уже не могу
К вечеру нужно чтоб это несчастье уже заработало, а сил уже никаких...
Помогите кто чем может, если не трудно...
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2011, 13:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создание массива указателей на векторы (C++):

Создание одного массива из другого с использованием указателей - C++
Ошибка 1 error C2440: =: невозможно преобразовать "double *" в "double" 17 Ошибка 2 error C2440: =: невозможно преобразовать "double *"...

Создание стека в виде массива указателей на разные классы - C++
Добрый день форумчане! Очень надеюсь на вашу помощь! Сел самостоятельно изучать плюсы по Лафоре,в одном из задании необходимо было сделать...

Создание массивов указателей на массивы указателей - C++
Помогите в решении задачи: создал массив указателей на массивы указателей на строки, но компилятор ругается на то что не может...

Добавление нового указателя в конец массива указателей, удаление указанного элемента, добавление указателей - C++
Здравствуйте. Помогите, пожалуйста, разобраться с одним большим заданием. Задание пока в процессе написания, но уже наверное есть ошибки....

Массив указателей на массив строк и сортировка массива указателей - C++
Добрый день. Поступил вопрос. Есть задача. У нас встроенный массив char mass;.Мы вводим строки до тех пор, пока не будет заполнен массив...

Сортировка массива структур через сортировку массива указателей - C++
Ошибка возникает в функции void sort(student **ppStud, int k, char ch). Кто видит ошибку - помогите, пожалуйста. Код программы: ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
03.02.2011, 14:15 #2
Возможно, так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <vector>
 
int main()
{
    const int number_of_elements = 10;
 
    std::vector< int > **array_of_pointers = new std::vector< int > *[number_of_elements];
 
    for (size_t i = 0; i < number_of_elements; ++i)
        array_of_pointers[i] = new std::vector< int >;
 
    // Работа с массивом указателей на векторы
 
    for (size_t i = 0; i < number_of_elements; ++i)
        delete array_of_pointers[i];
 
    delete [] array_of_pointers;
 
    return 0;
}
Эри
1 / 1 / 0
Регистрация: 03.02.2011
Сообщений: 8
03.02.2011, 14:46  [ТС] #3
Хм...
Вообще очень похоже на именно то, что мне нужно.
Сейчас потыркаюсь по справочникам уточню значение size_t и окончательно определюсь.

И ещё хорошо бы понять, как у меня программа заканчивается неначавшись (но это так... оффтоп)

С size_t разобралась. Сейчас попробую в прорамме это реализовать(читай вставить в правильное место).
Единственное:

Цитата Сообщение от silent_1991 Посмотреть сообщение
std::vector< int > **array_of_pointers = new std::vector< int > *[number_of_elements];
можно логику этой строки? точнее сказать в данном случае ** у нас как интерпретируется?
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
03.02.2011, 14:52 #4
Эри, Вообще это крайне хреновая идея. Массив указателей на вектора. Не стоит смешивать указатели и STL...

C++
1
std::vector<std::vector<int> > vvec;
все же несколько предпочтительнее.
Эри
1 / 1 / 0
Регистрация: 03.02.2011
Сообщений: 8
03.02.2011, 15:05  [ТС] #5
Цитата Сообщение от ForEveR Посмотреть сообщение
Эри, Вообще это крайне хреновая идея. Массив указателей на вектора. Не стоит смешивать указатели и STL...

C++
1
std::vector<std::vector<int> > vvec;
все же несколько предпочтительнее.
Вы предлагаете создать вктор векторов, на сколько я понимаю?
Косяк в том, что строчками 20-ю ниже мне нужно будет тянуться к векторам.
Указатели я представляю как отследить, а вот с вектором несколько сложно. В векторе ведь обрашение идет как в одномерном массиве? А какая максимальная длинна такого вектора?

Но в целом совершенно согласна что "мухи отдельно - катлеты отдельно"
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
03.02.2011, 15:45 #6
Эри, Правильно понимаете.
А в чем сложность отслеживания вектора?
Да как в одномерном массиве, ну и не только.
Максимальная длина... Хм. Полагаю что максимальное значение size_t.
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
03.02.2011, 15:53 #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <vector>
 
int main()
{
    // вектор 5x5
    std::vector< std::vector<int> > v(5, std::vector<int>(5));
 
    // заполняем
    for(size_t i = 0; i < v.size(); ++i)
        for(size_t j = 0; j < v[i].size(); ++j)
            v[i][j] = i + j;
 
    // выводим
    for(size_t i = 0; i < v.size(); ++i)
    {
        for(size_t j = 0; j < v[i].size(); ++j)
            std::cout << v[i][j] << ' ';
        std::cout << std::endl;
    }
}
Эри
1 / 1 / 0
Регистрация: 03.02.2011
Сообщений: 8
03.02.2011, 16:50  [ТС] #8
rangerx, спасибо, очень доступный пример.


ForEveR, сложность в том, что очень привыкла работать с обычными массивами, обычными указателями. А с данной библиотекой знакома без году неделя. + к тому, как-то не выходит у меня с ними работать [с векторами]. всё как-то криво обращаюсь к ним и получается "лажа".
Nameless One
Эксперт С++
5771 / 3420 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
03.02.2011, 18:15 #9
Цитата Сообщение от Эри Посмотреть сообщение
ForEveR, сложность в том, что очень привыкла работать с обычными массивами, обычными указателями.
У вектора есть т.н. итераторы, работа с которыми не сильно отличается от работы с указателями. Вот пример (в комментариях показан эквивалентный код с массивами и указателями):
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
#include <iostream>
#include <vector>
#include <ctime>
#include <cstdlib>
 
int main()
{
    const size_t size = 15;
    const int l_t = -15;
    const int r_t =  15;
 
    srand(static_cast<size_t>(time(NULL)));
 
    /* Аналог int iarray[size] */
    std::vector<int> ivec(size);
    for(std::vector<int>::iterator it = ivec.begin(); // int* ip = iarray
    it != ivec.end();                 // ip != iarray + size
    ++it)                         // ++ip
    *it = rand() % (r_t - l_t + 1) + l_t;         // *ip = rand() % ...
    
    std::cout << "Generated vector:" << std::endl;
    for(std::vector<int>::const_iterator it = ivec.begin(); // const int* ip = array
    it != ivec.end();                   // ip != iarray + size
    ++it)                           // ++ip
    std::cout << *it << std::endl;              // std::cout << *ip << std::endl;
    
    return 0;
}
А с данной библиотекой знакома без году неделя. + к тому, как-то не выходит у меня с ними работать [с векторами]. всё как-то криво обращаюсь к ним и получается "лажа".
Тут все дело в привычке.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
03.02.2011, 19:03 #10
Nameless One, Таки NULL использовать не рекомендуется в С++...

Эри, Стоит привыкать. В разы удобнее, безопаснее и прочие достоинства перечислять нет смысла. Понять их можно при использовании.
Александров не зря писал - "используйте вектор по умолчанию".
Nameless One
Эксперт С++
5771 / 3420 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
03.02.2011, 19:06 #11
Цитата Сообщение от ForEveR Посмотреть сообщение
Nameless One, Таки NULL использовать не рекомендуется в С++...
А в C++ он может не равняться 0? Просто в данном случае я использовал его для наглядности (ну, по крайней мере, мне кажется, что так наглядней)
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
03.02.2011, 19:08 #12
Nameless One, Насчет может не может не знаю... Но Бьярне не советует.
Эри
1 / 1 / 0
Регистрация: 03.02.2011
Сообщений: 8
03.02.2011, 19:25  [ТС] #13
По медленнее уважаемые! Я же записываю!)

Ну вроде скрепя зубами я даже ужилась с векторами... Вроде даже они ужиилисо со мной)
Цитата Сообщение от Nameless One Посмотреть сообщение
Тут все дело в привычке.
Наверное да.

Цитата Сообщение от Nameless One
А в C++ он может не равняться 0?
насколько я помню - ноль

Цитата Сообщение от ForEveR Посмотреть сообщение
Эри, Стоит привыкать. В разы удобнее, безопаснее и прочие достоинства перечислять нет смысла. Понять их можно при использовании.
Александров не зря писал - "используйте вектор по умолчанию".
А вариантов других нету судя по всему) Да и в профессиональном смысле стоит уже начать рости.

Спасибо огромное Вам всем!
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
03.02.2011, 20:02 #14
Я бы сразу стал использовать вектор векторов))) Но раз уж просили именно так... Мало ли чего там заковыристого надо было извлечь из массива указателей на векторы...

Цитата Сообщение от Эри Посмотреть сообщение
можно логику этой строки? точнее сказать в данном случае ** у нас как интерпретируется?
Если ещё интересно: у нас имеется тип: std::vector< int >. Нам надо создать из него массив. Т.е. *array_of_pointers (ведь имя массива - указатель на его начало). Но массив-то должен быть массивом указателей. Поэтому мы добавляем ещё одну звёздочку. Далее память выделяем под такой же тип - под массив указателей, т.е. std::vector< int > *[number_of_elements], где [] - массив, а звёздочка перед [] - указателей.
Эри
1 / 1 / 0
Регистрация: 03.02.2011
Сообщений: 8
03.02.2011, 20:10  [ТС] #15
А вектор, как я понимаю, как и массив не может создаться если не сказать что-то кроме типа о его наполнении?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.02.2011, 20:10
Привет! Вот еще темы с ответами:

Создание меню с использованием указателей на метод класса - C++
Добрый вечер. Помогите пожалуста разобраться с указателями на метод класса и вызов методов класса через указатель, как в данном коде...

Удаление массива указателей - C++
есть класс: class test { private: static test **list; static int count_object; public: void mesto::Add() {

Программирование массива указателей - C++
Подскажите, в чем различие выделения памяти для массива указателей char **term;: term = (char **)malloc(10); и *term = (char...

Сортировка массива указателей - C++
Всем доброго вечера Столкнулся я с проблемой примерно вот такого: типа у меня есть класс class tourism { friend tourism...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
03.02.2011, 20:10
Ответ Создать тему
Опции темы

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