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

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

Восстановить пароль Регистрация
 
Olejeg85
13 / 10 / 0
Регистрация: 27.03.2011
Сообщений: 164
21.06.2011, 19:02     не получается сделать задание с оператором -> #1
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 без инициализации... помогите сделать задание
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2011, 19:02     не получается сделать задание с оператором ->
Посмотрите здесь:

C++ Как сделать это задание?
Не получается сделать 3 класса шаблонными. C++
Все не получается сделать C++
Нужно сделать таймер но не получается C++
C++ Не получается сделать задачу
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
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; 
}
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
21.06.2011, 19:20     не получается сделать задание с оператором -> #3
А начать можно с того, что
C++
1
vector<string> *ptr;
не соответствует заданию. Это указатель на вектор, а в задании про вектор указателей
Olejeg85
13 / 10 / 0
Регистрация: 27.03.2011
Сообщений: 164
21.06.2011, 19:28  [ТС]     не получается сделать задание с оператором -> #4
Цитата Сообщение от grizlik78 Посмотреть сообщение
А начать можно с того, что
C++
1
vector<string> *ptr;
не соответствует заданию. Это указатель на вектор, а в задании про вектор указателей
а вектор указателей как сделать?

C++
1
vector<string*> ptr
так?
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
21.06.2011, 19:30     не получается сделать задание с оператором -> #5
Да. Ну а под каждую строку надо выделять память, как уже было справедливо замечено.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.06.2011, 19:32     не получается сделать задание с оператором -> #6
Цитата Сообщение от grizlik78 Посмотреть сообщение
Да. Ну а под каждую строку надо выделять память, как уже было справедливо замечено.
и в конце работы программы пройтись по вектору и освободить
Olejeg85
13 / 10 / 0
Регистрация: 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 подчеркнуты везде...
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
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; 
}
Olejeg85
13 / 10 / 0
Регистрация: 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()
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.06.2011, 20:01     не получается сделать задание с оператором -> #10
Olejeg85, суть итератора - указатель, а у вас в контейнере что лежит? указатель на стринг, значит итератор будет указателем на указатель, потому сначала разыменовуем итератор и через -> обращаемся к методам стринга
Olejeg85
13 / 10 / 0
Регистрация: 27.03.2011
Сообщений: 164
21.06.2011, 20:02  [ТС]     не получается сделать задание с оператором -> #11
Цитата Сообщение от Maxwe11 Посмотреть сообщение
Olejeg85, суть итератора - указатель, а у вас в контейнере что лежит? указатель на стринг, значит итератор будет указателем на указатель, потому сначала разыменовуем итератор и через -> обращаемся к методам стринга
ясненько пасиб )
silent_1991
21.06.2011, 20:53
  #12

Не по теме:

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

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

а использовать в качестве доступа к методу оператор . или -> это дело вкуса или есть более принципиальные причины использования оператора стрелки?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.06.2011, 21:27     не получается сделать задание с оператором ->
Еще ссылки по теме:

C++ Не получается сделать переполнение буфера
Сделать все задание в одной программе) C++

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

Или воспользуйтесь поиском по форуму:
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
21.06.2011, 21:27     не получается сделать задание с оператором -> #16
Olejeg85, дело вкуса, но ведь -> удобнее чем (*).
Yandex
Объявления
21.06.2011, 21:27     не получается сделать задание с оператором ->
Ответ Создать тему
Опции темы

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