С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/72: Рейтинг темы: голосов - 72, средняя оценка - 4.81
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
1

Вектор указателей и оператор "стрелка"

09.10.2012, 14:55. Показов 14383. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не получается реализовать отбражение содержимого контейнера, при помощи оператора ->.
Задания и мои коментарии к коду продоставлены ниже.

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
// Напишите программу, в которой определён вектор указателей на
// строки. Организуйте перебор вектора с отображением каждой
// строки и её размера при помощи оператора ->
 
#include <iostream>
#include <vector>
#include <string>
using namespace std;
 
int main()
{
   string inp_str;
   // как мне кажется, для выполнения задания необходим
   // доплнительный вектор с типом vector<string> 
   vector<string> vect;
   while(getline(cin, inp_str)) //забъём в него произвольные сроки
      vect.push_back(inp_str);
 
   // объявим вектор указателей на строки равным количеству 
   // элементов вектора строк
   
   vector<string*> ptr_vect(vect.size());
 
   // ??? теперь укажем вектор указателей на строки на вектор
   // строк... И отобразим результат
   for ( vector<string>::size_type ix = 0; ix != vect.size();
     ++ix ) {
   ptr_vect[ix] = &vect[ix];
   cout << *ptr_vect[ix] << endl;
   }
 
   // Про оператор стрелка (->) в учебнике говориться следующее:
   // (*p).foo; - обратиться к значению указателя p, чтобы получив
   // объект обратиться к его члену по имени foo. Запись 
   // p->foo аналогична (*p).foo
   
   
   // Но как это осуществить при помощи вектора указателей в
   // учебнике, к сожалению, не сказано :)
 
   //   cout << (*ptr_vect[0]).vect[0]; // FAIL
   //   cout << (*ptr_vect).vect[0]; // FAIL
 
   return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.10.2012, 14:55
Ответы с готовыми решениями:

Стрелка (вектор) в Лазарусе
Всем добрый день! Подскажите, пожалуйста, есть ли в Лазарусе возможность создать стрелочку,...

Вектор ссылок и вектор указателей
есть 2 задачи 1-создать вектор ссылок на Employee для хранения различных объектов произвольных...

Почему обращение к методам осуществляется через оператор прямого доступа, а не через оператор указателей->?
#include &lt;iostream&gt; using namespace std; class random { public: void Set(int b){a=b;} int...

Вектор указателей
Здравствуйте , возникло не понимание почему в этом коде #include&lt;iostream&gt; #include &lt;vector&gt;...

Вектор указателей
Добрый день) Припустим что у нас есть вектор указателей на что... то, какой размер он будет...

10
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
09.10.2012, 15:18 2
А зачем так код усложнять? Там второй вектор указателей вообще не нужен.
0
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
09.10.2012, 15:21  [ТС] 3
Цитата Сообщение от yuron_477 Посмотреть сообщение
А зачем так код усложнять? Там второй вектор указателей вообще не нужен.
Если вас не затруднит продемонстрируйте, пожалуйста, ваше решение задания.
0
79 / 79 / 8
Регистрация: 14.10.2009
Сообщений: 121
09.10.2012, 15:21 4
Вот так можно ^_^
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
#include <iostream>
#include <vector>
#include <string>
using namespace std;
 
int main()
{
   string inp_str;
   vector<string*> ptr_vect;
 
   for(int i = 0; i < 3; i++)
   {
      getline(cin, inp_str);
      ptr_vect.push_back(new string(inp_str));
   }  
 
   // правильнее использовать итераторы.
   for(size_t i = 0; i < ptr_vect.size(); i++)
   {
       cout << ptr_vect[i]->c_str() << " length: " << ptr_vect[i]->size() << endl;
   }
 
   system("pause");
 
   return 0;
}
1
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
09.10.2012, 15:38  [ТС] 5
ЗЫ. Я просто не вкурсе как другим способом можно определить вектор указателей на стоки.

Добавлено через 14 минут
Ну раз вы уж начали отвечать объясните пожалуйста значени
C++
1
ptr_vect.push_back(new string(inp_str));
и
C++
1
cout << ptr_vect[i]->c_str()
Что то не понятко как можно добавить в вектор динамически массив строк, и откуда во втором случаи взялась строка с стиле С?
0
79 / 79 / 8
Регистрация: 14.10.2009
Сообщений: 121
09.10.2012, 15:44 6
C++
1
new string(inp_str)
Эта конструкция создает в памяти строку, инициализирует ее другой строкой и возвращает указатель на нее. Этот указатель сохраняется в векторе указателей на строки. Все элементарно.

C++
1
cout << ptr_vect[i]->c_str()
Ну вам же нужно использовать оператор ->
1
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
09.10.2012, 15:55  [ТС] 7
Цитата Сообщение от ProNoooob Посмотреть сообщение
1
cout << ptr_vect[i]->c_str()
Т.е. это строка означает, что нужно обратиться к значению на которое указывает индекс i, чтобы полчуив объект (как понял объектом является динамическая строка) обратиться к фукнции с_str()? Вот только не понятно окуда там взялась эта функция?
0
79 / 79 / 8
Регистрация: 14.10.2009
Сообщений: 121
09.10.2012, 16:37 8
Цитата Сообщение от xtorne21st Посмотреть сообщение
Т.е. это строка означает, что нужно обратиться к значению на которое указывает индекс i, чтобы полчуив объект (как понял объектом является динамическая строка) обратиться к фукнции с_str()? Вот только не понятно окуда там взялась эта функция?
C++
1
vector<string*> ptr_vect;
У нас вектор указателей на класс строк.
Соответственно запись
C++
1
ptr_vect[i]
Означает получение указателя на объект строка. string *
В таком виде его нельзя напечатать. Нужно его разыменовать.
Либо оператором звездочка, либо стрелочкой(которая звездочка с точкой на самом деле).
Вам в задании нужно использовать стрелочку. Следовательно мы должны вызвать какую-то функцию у нашей строки. c_str() подходит идеально ^_^
1
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
09.10.2012, 16:52  [ТС] 9
С оператором стрелка, благодаря вам я разобрался.
А вот функция с_str() входит в класс string и возвращает сроку с стиле С?
Я правильно понял?
0
0 / 0 / 0
Регистрация: 11.07.2015
Сообщений: 1
13.07.2015, 16:41 10
Тема уже не актуальна, но для тех, кто в будущем будет гуглить дам более простое решение.
это задача из книги Липмана, решение только с теми знаниями, которые Липман дал на эту задачку.
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 stroka;
    vector <string> vectorr;
    string *link = &stroka;
    while (getline(cin, stroka)) {
        vectorr.push_back(*link);
    }
    vector <string>::iterator iter = vectorr.begin();
    for (vector <string>::iterator iter = vectorr.begin(); iter != vectorr.end(); iter++) {
        cout << *iter << " " << iter->size() << endl;
    }
    system("pause");
    return 0;
}
0
0 / 0 / 0
Регистрация: 01.04.2017
Сообщений: 1
01.04.2017, 12:40 11
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 <string>
#include <vector>
#include <cstring>
//#include <cstddef>
 
using std::cout;
using std::cin;
using std::endl;
using std::string;
using std::vector;
 
int main(int argc, const char *argv[])
{
    vector<string*> sp_vec;
    string s1 = "this is s1 string";
    string s2 = "this is s2 string";
    sp_vec.push_back(&s1);
    sp_vec.push_back(&s2);
 
    for (vector<string*>::iterator it = sp_vec.begin(); it != sp_vec.end(); ++it)
    {
        cout << **it << " " << (*it)->size() << endl;
    }
 
}
0
01.04.2017, 12:40
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.04.2017, 12:40
Помогаю со студенческими работами здесь

Вектор константных указателей
Как мне создать вектор константных указателей? Не вектор указателей на константы, и не константный...

Вектор указателей на класс
Создал класс: class Facility; #ifndef PROCESS_H_ #define PROCESS_H_ class Process { ...

Вектор указателей не сруктуры
Доброго времени суток, пишу код и возникла проблема. Данный кусок когда считывает данные из файла и...

Вектор указателей на массивы
Есть несколько массивов valarray. Нужно сохранить в векторе указатели на определенные ячейки этих...

вектор указателей абстрактного класса
Добрый вечер, задача состоит в следующем: найти наибольшую площадь фигуры, посредством...

Вектор из указателей абстракттного класса
Критически прошу помощи ! Есть абстрактный класс и два его дочерних. В дочерних переопределена...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Блоги программистов
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­­­­­­­­­­­­­хро­н­н­ы­й счётчик с управляющим сигналом задержки).
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru