Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
13 / 10 / 1
Регистрация: 27.03.2011
Сообщений: 164
1

не получается сделать задание с оператором ->

21.06.2011, 19:02. Показов 1169. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//тема про оператор стрелка -> я так понимаю задание надо сделать с использованием этого оператора
//напишите программу, в которой определен вектор указателей на строки. Организуйте
//перебор вектора с отображением каждой строки и ее размера
#include <iostream>
#include <vector>
#include <string>
using namespace std;   
 
int main()
{
    string word;
    vector<string> *ptr;
 
    while (cin >> word)
        ptr->push_back(word);
 
    for(vector<string>::iterator iter=ptr->begin(); iter!=ptr->end(); ++iter)
        cout << ptr << " = " << ptr->size() << " simbols";
 
    system("pause");
    return 0; 
}
ошибка: использована переманная ptr без инициализации... помогите сделать задание
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.06.2011, 19:02
Ответы с готовыми решениями:

не получается сделать 10 и 15 задание?
Начал решать 10 и 15 задание, помогите, как понял в 10 лучше отсортировать а потом проверять...

Не получается сделать задание по MS Access
Дана база сотрудников НИИ. В каждой лаборатории имеется несколько сотрудников ( в одной один ). В...

Не получается сделать задание по учебе
Всем привет! :) Есть следующее задание: На склад ежедневно поступают материалы, необходимые...

Не получается сделать задание с мат. логикой
Под А и В сделал, а под Б не получается. Помогите пожалуйста!

15
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
21.06.2011, 19:17 2
память нужно выделить под вектор
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <vector>
#include <string>
 
int main()
{
        std::string word;
        std::vector<std::string> * ptr = new std::vector<std::string>();
 
        while (std::cin >> word)
                ptr->push_back(word);
 
        for(std::vector<std::string>::iterator iter=ptr->begin(); iter!=ptr->end(); ++iter)
                std::cout << *iter << " = " << iter->size() << " simbols\n";
 
        system("pause");
        delete ptr;
        return 0; 
}
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
21.06.2011, 19:20 3
А начать можно с того, что
C++
1
vector<string> *ptr;
не соответствует заданию. Это указатель на вектор, а в задании про вектор указателей
0
13 / 10 / 1
Регистрация: 27.03.2011
Сообщений: 164
21.06.2011, 19:28  [ТС] 4
Цитата Сообщение от grizlik78 Посмотреть сообщение
А начать можно с того, что
C++
1
vector<string> *ptr;
не соответствует заданию. Это указатель на вектор, а в задании про вектор указателей
а вектор указателей как сделать?

C++
1
vector<string*> ptr
так?
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
21.06.2011, 19:30 5
Да. Ну а под каждую строку надо выделять память, как уже было справедливо замечено.
1
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
21.06.2011, 19:32 6
Цитата Сообщение от grizlik78 Посмотреть сообщение
Да. Ну а под каждую строку надо выделять память, как уже было справедливо замечено.
и в конце работы программы пройтись по вектору и освободить
0
13 / 10 / 1
Регистрация: 27.03.2011
Сообщений: 164
21.06.2011, 19:42  [ТС] 7
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>
#include <string>
using namespace std;   
 
int main()
{
    string word;
    vector<string*> ptr=new vector<string>();
 
    while (cin >> word)
        ptr->push_back(word);
 
    for(vector<string>::iterator iter=ptr->begin(); iter!=ptr->end(); ++iter)
        cout << *iter << " = " << iter->size() << " simbols" << endl;
 
    system("pause");
    delete [] ptr;
    return 0; 
}
теперь new и ptr подчеркнуты везде...
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
21.06.2011, 19:50 8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <vector>
#include <string>
 
int main()
{
    std::string word;
    std::vector<std::string*> ptr;
 
    while (std::cin >> word)
        ptr.push_back(new std::string(word));
 
    for(std::vector<std::string*>::iterator iter = ptr.begin(); iter != ptr.end(); ++iter)
    {
    std::cout << (*iter)->c_str() << " = " << (*iter)->size() << " simbols\n";
           //альтернатива std::cout << **iter << " = " << (*iter)->size() << " simbols\n";
    delete *iter;
    }
 
    system("pause");
    return 0; 
}
1
13 / 10 / 1
Регистрация: 27.03.2011
Сообщений: 164
21.06.2011, 19:57  [ТС] 9
Цитата Сообщение от Maxwe11 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <vector>
#include <string>
 
int main()
{
    std::string word;
    std::vector<std::string*> ptr;
 
    while (std::cin >> word)
        ptr.push_back(new std::string(word));
 
    for(std::vector<std::string*>::iterator iter = ptr.begin(); iter != ptr.end(); ++iter)
    {
    std::cout << (*iter)->c_str() << " = " << (*iter)->size() << " simbols\n";
           //альтернатива std::cout << **iter << " = " << (*iter)->size() << " simbols\n";
    delete *iter;
    }
 
    system("pause");
    return 0; 
}
спасиб, только зачем в выводе писать (*iter) если оператор -> как раз сделан для того, чтобы не писать
C++
1
(*iter).size()
в книге так и написано, что он как раз для того, чтобы была простая запись типа
C++
1
iter->size()
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
21.06.2011, 20:01 10
Olejeg85, суть итератора - указатель, а у вас в контейнере что лежит? указатель на стринг, значит итератор будет указателем на указатель, потому сначала разыменовуем итератор и через -> обращаемся к методам стринга
1
13 / 10 / 1
Регистрация: 27.03.2011
Сообщений: 164
21.06.2011, 20:02  [ТС] 11
Цитата Сообщение от Maxwe11 Посмотреть сообщение
Olejeg85, суть итератора - указатель, а у вас в контейнере что лежит? указатель на стринг, значит итератор будет указателем на указатель, потому сначала разыменовуем итератор и через -> обращаемся к методам стринга
ясненько пасиб )
0
silent_1991
21.06.2011, 20:53
  #12

Не по теме:

Ппц, извращение так смешивать STL и указатели... ИМХО

0
13 / 10 / 1
Регистрация: 27.03.2011
Сообщений: 164
21.06.2011, 21:13  [ТС] 13
а в рабочик программах используются массивы указателей или векторы указателей? если да то в каких? просто не понимаю зачем их использовать, если можно обходится в программах и без них?
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
21.06.2011, 21:17 14
Olejeg85, да, при наследовании удобнее всего оперировать массивом (вектором) указателей на базовый класс, чтобы правильно вызывались виртуальные функции. Правда, для тех же целей можно применить ссылки, но я как-то всегда пользовался именно указателями.
1
13 / 10 / 1
Регистрация: 27.03.2011
Сообщений: 164
21.06.2011, 21:19  [ТС] 15
Цитата Сообщение от silent_1991 Посмотреть сообщение
Olejeg85, да, при наследовании удобнее всего оперировать массивом (вектором) указателей на базовый класс, чтобы правильно вызывались виртуальные функции. Правда, для тех же целей можно применить ссылки, но я как-то всегда пользовался именно указателями.
аа, пасибки, как раз скоро до классов дойду, а там уже не за горами и наследование, вирт функции и шаблоны ))

а использовать в качестве доступа к методу оператор . или -> это дело вкуса или есть более принципиальные причины использования оператора стрелки?
0
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
21.06.2011, 21:27 16
Olejeg85, дело вкуса, но ведь -> удобнее чем (*).
0
21.06.2011, 21:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.06.2011, 21:27
Помогаю со студенческими работами здесь

Не получается сделать 6е задание 3й главы из книги Бьярне Страуструп
Здравствуйте, я совсем не давно начал изучать C++ и начал с книги Бьярна Страуструпа, и остановился...

Задание с оператором for и do while
Разработайте программу, которая выполняет вычисления с числами, которые вводятся с клавиатуры...

Задание c оператором goto
Пользователь с клавиатуры вводит числа. Посчитать их сумму и вывести на экран, как только...

Задание с оператором выбора CASE
Напишите программу, которая по введенному номеру месяца года выводит количество дней в месяце.


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru