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

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

Войти
Регистрация
Восстановить пароль
 
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
#1

Вывести элементы вектора, вывести их адрес - C++

26.05.2014, 14:25. Просмотров 1102. Ответов 14
Метки нет (Все метки)

Задача. Создать вектор указателей на строки. Вывести элементы вектора, вывести их адрес. При решение задачи надо использовать логические выражение. Ибо задача этого раздела. Но не знаю как использовать тут логические выражение. Написал программу. По моему мнению очень плохую но по другому не могу. Компилировал с ошибкой зависла программа не хочет выйти с программы надо перезагрузит комп. Но не хочу тратит времени на перезагрузку. Потом надо будет заново писать все.

Код С++
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
#include <iostream>
#include <conio.h>
#include <string>
#include <vector>
int main()
{ //Задача создат вектор указателей на элементы строки. Вывести элементы вектора, адрес элементов.
    setlocale (LC_ALL , "Russian");
    std::string str; 
    std::cout << "Введите строку" << std::endl;
    int a = 0;
    std::vector<char> us(10);
        std::vector<char>::iterator b;
        int *x = 0;
    if(std::cin >> str, std::cin.get() != '\n')
        //создаем указатели на элементы строки
        for(std::string::size_type ix = 0; ix != str.size(); ++ix)
        {   *x = str[ix]; 
            a = *x;
           //сохраняем указатели в вектор.
            us.push_back(a); 
    }
    //выводим элементы вектора и их адрес.
    for(std::vector<char>::iterator d = us.begin(); d != us.end(); ++d)
        std::cout << "Элемент вектора " << " - " << *d << " "
        << " Адрес элемента "  << us[d] << std::endl; 
 
            _getch ();
            return 0;
}


Добавлено через 2 минуты
И я без понятие как вывести адрес элементов вектора если использовал итераторы. Могу переписать код с индексом в место итератора но интересно узнать как вывести адрес элемента вектора при использование итератора.

Добавлено через 1 минуту
И почему не могу закрыт программу даже с диспетчера задач?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4459 / 3797 / 1284
Регистрация: 14.04.2014
Сообщений: 14,906
26.05.2014, 15:25     Вывести элементы вектора, вывести их адрес #2
Ты плохо понимаешь, что такое указатели. Откуда ив вообще взяться, если у тебя vector содержит символы.
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
26.05.2014, 15:54  [ТС]     Вывести элементы вектора, вывести их адрес #3
Ну я знаю что указатели эти такие штуки которые указывают на некий объект. Не важно что это такое главное чтоб это было записано в памяти. К стати указатели самостоятельные объекты в памяти.

Я знаю что я не правильно написал код. Код компилируеться но символы строки не сохраняются в веектор.

Добавлено через 5 минут
Unhandled exception at 0x00187F14 in Project10.exe: 0xC0000005: Access violation writing location 0x00000000.

Выдает такую вот ошибку. Что это такое? Это не связано с кодом. (на сколько я понял)

Добавлено через 3 минуты
И еще этот код не работает.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <conio.h>
#include <vector>
int main()
{
    setlocale( LC_ALL, "Russian");
    std::vector<int> num;
    int a;
std::cout << "Введите несколько чисел: \n";
while(std::cin >> a, a != '\n')
a % 2 != 0 ? num.push_back(a): num.push_back(a*2);
for(int r = 0; r < num.size(); r++)
    std::cout << r << " Элемент вектора: " << num[r] << std::endl;
_getch();
return 0;
}
А именно эта строка
C++
1
while(std::cin >> a, a != '\n')
Добавлено через 5 минут
Первая программа которую я показал тут выводил элементы пустого вектора. Не сколько раз запустил пару раз сработало выводило элементы пустого вектора. Убрал ввод строки записал строку в память. Перестал работать.Тепер код выглядит так.
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
#include <iostream>
#include <conio.h>
#include <string>
#include <vector>
int main()
{ //Задача создат вектор указателей на элементы строки. Вывести элементы вектора, адрес элементов.
    setlocale (LC_ALL , "Russian");
    std::string str("Hello!!")
    
   
    std::vector<char> us;
        
        int *x = 0;
   
        //создаем указатели на элементы строки
        for(std::string::size_type ix = 0; ix != str.size(); ++ix)
        {   *x = str[ix]; 
            a = *x;
           //сохраняем указатели в вектор.
            us.push_back(a); 
    }
    //выводим элементы вектора и их адрес.
    for(std::vector<char>::iterator d = us.begin(); d != us.end(); ++d)
        std::cout << "Элемент вектора " << " - " << *d << " "
        << " Адрес элемента "  << us[d] << std::endl; 
 
            _getch ();
            return 0;
}
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,994
26.05.2014, 16:31     Вывести элементы вектора, вывести их адрес #4
Цитата Сообщение от Altair42 Посмотреть сообщение
int *x = 0;
нильзя так =(( это же rvalue

тут пара лишних хедеров т.к. я делал кое-что дургое что удалил, ну и создал я для простоты объекты string, а не *char ... хотя тут уже...string те же строки
Добавлено через 9 минут
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
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <iomanip>
#include <vector>
#include <iterator>
#include <algorithm>>
#include <cmath>
using namespace std;
 
void show(const string &str)
{
  cout<<str<<endl;
}
void show_adres(const string &str)
{
  cout<<&str<<endl;
}
 
int main()
{
int size;
cout<<"enter number of strings: ";
cin>>size;
vector<string> a(size+1);
vector<string>::iterator it;
for (it=a.begin();it!=a.end();it++)
    getline(cin,*it);
for_each(a.begin(),a.end(),show);
for_each(a.begin(),a.end(),show_adres);
return 0;
}
Добавлено через 5 минут
Цитата Сообщение от Altair42 Посмотреть сообщение
не знаю как использовать тут логические выражение.
я тоже...что-то лишнее)
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
26.05.2014, 16:51  [ТС]     Вывести элементы вектора, вывести их адрес #5
dzrkot, В этом коде много чего я не могу понят. Я только изучаю асновы.
C++
1
2
for_each(a.begin(),a.end(),show);
for_each(a.begin(),a.end(),show_adres);
В принципе понял что это такое, но я не знаю как это использовать. Уровень знаний С++ не позволяет.
Цитата Сообщение от dzrkot Посмотреть сообщение
нильзя так =(( это же rvalue
Ок надо еще раз прочитать раздел с указателями.

Добавлено через 3 минуты
C++
1
2
#include <iterator>
#include <cmath>
Зачем это? Вид класс вектор тащит в себе итераторы. И причем тут математика?
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,994
26.05.2014, 16:55     Вывести элементы вектора, вывести их адрес #6
Цитата Сообщение от Altair42 Посмотреть сообщение
Зачем это? Вид класс вектор тащит в себе итераторы. И причем тут математика?
Цитата Сообщение от dzrkot Посмотреть сообщение
тут пара лишних хедеров т.к. я делал кое-что дургое что удалил,
я делал это в своём коде, который просто вынес и не выкидывал, так что вам они не нужны, а мне было просто лень удалять их)

Цитата Сообщение от Altair42 Посмотреть сообщение
Уровень знаний С++ не позволяет.
так вот вам и пример - разберитесь что и как, будут вопросы - обращайтесь, помогу если вам действительно это интересно а не "лишь бы лабу сдать")
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
26.05.2014, 17:06  [ТС]     Вывести элементы вектора, вывести их адрес #7
dzrkot, нуу как бы я самостоятельно изучаю С++. с книги и форума

И какие то проблемы с VS. Раньше использовал VS 2010 все было просто шык. Перешел на VS 2012 начались проблемы. Вот данный код должен работать.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <conio.h>
#include <vector>
int main()
{
    setlocale( LC_ALL, "Russian");
    std::vector<int> num;
    int a;
std::cout << "Введите несколько чисел: \n";
while(std::cin >> a, a != '\n')
a % 2 != 0 ? num.push_back(a): num.push_back(a*2);
for(int r = 0; r < num.size(); r++)
    std::cout << r << " Элемент вектора: " << num[r] << std::endl;
_getch();
return 0;
}
Цикл while не заверщаеться при получение символа новой строки. Такая же проблема была раньше в другом коде. Там просто инициализировал символ новый строки (типа char x = '\n'. Но тут не чего не помогает. Ввожу фнкцию if работает ( сохраняет в вектор только 1 символ). Работает даже без функции if.
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,994
26.05.2014, 17:19     Вывести элементы вектора, вывести их адрес #8
Цитата Сообщение от Altair42 Посмотреть сообщение
while(std::cin >> a, a != '\n')
я честно не помню уже т.к. никогда в while() не вставляю cin>>, но вы уверены что там , а не && ?

Добавлено через 6 минут
вроде так вообще не делается....мб меня поправит тот, кто знает...
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
26.05.2014, 17:33  [ТС]     Вывести элементы вектора, вывести их адрес #9
dzrkot, оператор AND ... в принципе можно попробовать. Шас посмотрим
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,994
26.05.2014, 17:38     Вывести элементы вектора, вывести их адрес #10
сделайте и не парьтесь)
if( a=='\')
break;
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
26.05.2014, 17:52  [ТС]     Вывести элементы вектора, вывести их адрес #11
Должно работать но не работает. При получение значение a = '\n' условие функции не выполняеться. цикл должен прекратится. Но не чего не произходит.

Добавлено через 6 минут
Цитата Сообщение от dzrkot Посмотреть сообщение
сделайте и не парьтесь)
if( a=='\')
break;
Не работает. Все эти варианты рабочие. Первый хоть и не правильный работал в другой программе, второй правильный и не работает ( оператор AND), ваше предложение ввести оператор if тоже вариант но не работает.

После перезагрузки программы может и будет. Мне что каждый раз перезагрузит программу?

Добавлено через 3 минуты
Есть и более сложный вариант с и спользованием cin.get() cin.clear() Показали на форуме для решение проблемы с переходом на новую строку в другой программе. У меня не сработало. Так как не знаю всех деталей не стал искать почему не сработало.
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,994
26.05.2014, 18:00     Вывести элементы вектора, вывести их адрес #12
вообщем если найдёте ответ - скиньте, самому уже интересно)
0x10
2442 / 1614 / 235
Регистрация: 24.11.2012
Сообщений: 3,962
26.05.2014, 18:01     Вывести элементы вектора, вывести их адрес #13
Цитата Сообщение от dzrkot Посмотреть сообщение
нильзя так =(( это же rvalue
Где нельзя? Почему нельзя? Кто rvalue?
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,994
26.05.2014, 18:09     Вывести элементы вектора, вывести их адрес #14
Цитата Сообщение от 0x10 Посмотреть сообщение
Где нельзя? Почему нельзя? Кто rvalue?
пардон, там 0, мне показалось там 5 ....o_0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2014, 19:23     Вывести элементы вектора, вывести их адрес
Еще ссылки по теме:

Как вывести элементы вектора, являющиеся членами класса? C++
Как вывести построчно из вектора? C++
Отсортировать по возрастанию и вывести на экран сперва чётные элементы вектора, а затем нечётные C++
C++ Как вывести размер вектора
C++ Вывести введенные имя и адрес

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

Или воспользуйтесь поиском по форуму:
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
26.05.2014, 19:23  [ТС]     Вывести элементы вектора, вывести их адрес #15
0x10,

Добавлено через 1 час 13 минут
Не у кого нет идей?
Yandex
Объявления
26.05.2014, 19:23     Вывести элементы вектора, вывести их адрес
Ответ Создать тему
Опции темы

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