Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод на монитор значения вектора через функцию, Интересен альтернативный метод 
V
    Опции темы
Ukrajinec
Дата 23.12.2014, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 6.4.2009

Репутация: нет
Всего: нет



Нужно вывести на монитор значение вектора, который заполняется функцией №1, с помощью функции №2. 
Код

#include "stdafx.h"
#include <iostream>
#include <vector>

using namespace std;

const vector<int>* penta(int fin = 1);
void display_vector(const vector<int> vec);

int _tmain(int argc, _TCHAR* argv[])
{
    int i = 0;
    cout << "Enter number of elements:";
    cin >> i;
    const vector<int> *a = penta(i);
    if (!a)
        cerr << "Pointer A is annulled.";
    cout << "Penta = " << penta(i) << "\n";
    cout << "A = " << a << "\n";
    display_vector(*a);
    return 0;
}

const vector<int>* penta(int fin)
{
    int max_size = 1024;
    if (fin <= 0 || fin > max_size)
    {
        cerr << "Wrong number of elements. The number of elements is set to 8.\n";
        fin = 8;
    }
    static vector<int> elem(fin);
    for (int i = 0; i < fin; i++)
        elem[i] = i*((3 * i - 1) / 2);
    cout << "Elem = " << &elem << "\n";
    return &elem;
}
void display_vector(const vector<int> vec)
{

    for( int i = 0; i < vec.size(); i++)
    {        
        cout << "V[" << i << "]= " <<  vec[i] << "\n";
    }
    cout << "Vec = " << &vec;
}

Программа работает. Меня интересует, возможно ли функции display_vector дать адрес заполненного вектора, чтоб потом его вывести на монитор? Если да то как, потому что у меня это не получается (

Это сообщение отредактировал(а) Ukrajinec - 23.12.2014, 22:05
PM MAIL   Вверх
VSB
Дата 24.12.2014, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 23.8.2007

Репутация: нет
Всего: 2



Передавайте по ссылке

void display_vector(const vector<int>& vec)
PM MAIL   Вверх
Ukrajinec
Дата 24.12.2014, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 6.4.2009

Репутация: нет
Всего: нет



Цитата(VSB @  24.12.2014,  09:43 Найти цитируемый пост)
Передавайте по ссылке

void display_vector(const vector<int>& vec) 

Так пробовал, тогда в строчке
Код

display_vector(a);

ругается на указатель "а" Error: не существует подходящего конструктора для преобразования из "const std::vector<int, std::allocator<int>>* в ""std::vector<int, std::allocator<int>>* "



Это сообщение отредактировал(а) Ukrajinec - 24.12.2014, 11:42
PM MAIL   Вверх
baldina
Дата 24.12.2014, 12:09 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



Код

display_vector(*a);

PM MAIL   Вверх
Ukrajinec
Дата 24.12.2014, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 6.4.2009

Репутация: нет
Всего: нет



Цитата(baldina @  24.12.2014,  11:09 Найти цитируемый пост)
:
display_vector(*a);

хм.. работает)) а я думал что если функция должна получить адрес, то как аргумент туда и надо писать адрес, а не сам указатель из которого функция сама достанет то что ей надо) спасибо
PM MAIL   Вверх
konshyn
Дата 24.12.2014, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 19.9.2013

Репутация: нет
Всего: нет



Цитата(Ukrajinec @  24.12.2014,  18:24 Найти цитируемый пост)
хм.. работает)) а я думал что если функция должна получить адрес, то как аргумент туда и надо писать адрес, а не сам указатель из которого функция сама достанет то что ей надо) спасибо 

В языке С++ есть указатели и ссылки - это разные сущности.
Когда объявляешь указатель, то это переменная в памяти, которая хранит адрес на какой объект.
А когда объявляешь ссылку на переменную, то это просто псевдоним для этого объекта. 
например:
Код

int a = 10;
int &b = a;

здесь а - переменная, которая хранит значение 10 в своей памяти. А b - это ссылка, т.е. псевдоним, другое имя и т.п. сущности, и память для b не выделяется, просто компилятр ставит b в соответствие a.

Добавлено через 7 минут и 15 секунд
Указатель на ссылку нельзя создать, а ссылку на указатель можно.


--------------------
«Потому что ценность акта действия в этой стране возрастает в несколько раз».
PM MAIL Skype   Вверх
baldina
Дата 24.12.2014, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



Цитата(Ukrajinec @  24.12.2014,  18:24 Найти цитируемый пост)
 надо писать адрес, а не сам указатель

указатель как раз хранит адрес
Код

int a=10; // a - переменная целого типа, имеет значение 10
int  *p=&a; // p - указатель на переменную целого типа, имеет значение адреса переменной a
int b = *p; // передаем в b значение по адресу p
void foo(int*); // foo - функция, принимающая в качестве аргумента указатель (адрес)
foo(&a); // ok
foo(p); // ok


Это сообщение отредактировал(а) baldina - 24.12.2014, 21:03
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1311 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.