1 Востаннє редагувалося Joker (10.08.2014 21:20:02)

Тема: Векторні масиви у функціях

Як правильно передати векторний масив у функцію. Функція повинна його опрацювати і після роботи в ній він повинен змінитися. Тобто всі змінні масиву які відбулися у функції повинні бути збереженими.
Він створюється у main і передається у функцію як аргумент.

У мене получається тільки при роботі з простими масивами. Там є якісь особливості?

P.S. При потребі кину код;

2

Re: Векторні масиви у функціях

Що таке "векторний масив"? std::vector? Так само, як і будь-яку іншу змінну: посиланням чи вказівником. При потребі покажу, як зробити це, у вашому коді.

Подякували: Joker1

3

Re: Векторні масиви у функціях

угу троха зрозумів. Завтра скину код.

Як завжди, дякую.

4

Re: Векторні масиви у функціях

Joker написав:

Як правильно передати векторний масив у функцію. Функція повинна його опрацювати і після роботи в ній він повинен змінитися. Тобто всі змінні масиву які відбулися у функції повинні бути збереженими.
Він створюється у main і передається у функцію як аргумент.

У мене получається тільки при роботі з простими масивами. Там є якісь особливості?

P.S. При потребі кину код;

Через ссилку передати у функцію и буде щастя.:)

5

Re: Векторні масиви у функціях

Ось цей варіант не працює

не працює
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <vector>
#include <conio.h>
using namespace std;

void insert_sort (double arr[], int length);

int main()
{
    setlocale(LC_CTYPE, "ukr");
srand (time(NULL));

    int size; 

    cout << "Enter size --> ";
    cin >> size;

    vector<double> a(size);
    
    // Заповнення і вивід масиву
    cout << "\n" << "Масив до сортування :" << endl;
    for (int i = 0; i < size; ++i)
    {
        a[i] = (rand() % 1000) / 10.0;
        cout << a[i] << "\t";
    }

    cout << "\n" << "Масив після сортування: " << endl;
    insert_sort(a, size);

    _getch();
    return 0;
}

void insert_sort(double arr[], int length)
{
    int i, j;
    double value;

    for (i = 1; i < length; ++i)
    {
        arr[i] = value;
        for (j = i - 1; j >= 0 && arr[j] > value; --j)
        {
            arr[j + 1] = arr[j];
        }
        arr[j + 1] = value;
    }
}

А от зі звичайним все працює

Звичайний масив
#include <iostream>
#include <time.h>
#include <stdlib.h>
//#include <vector>
#include <conio.h>
using namespace std;

void insert_sort(double arr[], int length);

int main()
{
    setlocale(LC_CTYPE, "ukr");
    srand(time(NULL));

//    int size; 
    const short int size = 10;

    double a[size];

    //cout << "Enter size --> ";
    //cin >> size;

    //vector<double> a(size);
    
    // Заповнення і вивід масиву
    cout << "\n" << "Масив до сортування :" << endl;
    for (int i = 0; i < size; ++i)
    {
        a[i] = (rand() % 1000) / 10.0;
        cout << a[i] << "\t";
    }

    cout << "\n" << "Масив після сортування: " << endl;
    insert_sort(a, size);

    for (int i = 0; i < size; ++i)
        cout << a[i] << "\t";

    _getch();
    return 0;
}

void insert_sort(double arr[], int length)
{
    int i, j;
    double value;

    for (i = 1; i < length; ++i)
    {
        value = arr[i];
        for (j = i - 1; j >= 0 && arr[j] > value; --j)
            arr[j + 1] = arr[j];

        arr[j + 1] = value;
    }
}

6

Re: Векторні масиви у функціях

А давайте ви будете писати не "працює/не працює", а повністю описувати проблему. Бо якщо у вас вимкнули за борги електрику, то програма дійсно не буде працювати, але ми вам тут не допоможемо. Текст помилки наведіть.

7

Re: Векторні масиви у функціях

Векторний масив не передається у функцію. (перший код)
Я хочу щоб вона відсортувала його.

А коли його замінити на звичайний, то  все ок

8

Re: Векторні масиви у функціях

void insert_sort (double arr[], int length);
...
vector<double> a(size);
...
insert_sort(a, size);

давай подумаємо в чому проблема

9

Re: Векторні масиви у функціях

ну і? У звичайному масиві я робив так само і все пахає!

void insert_sort(double arr[], int length);
...
double a[size];
...
insert_sort(a, size);

10

Re: Векторні масиви у функціях

Joker написав:

ну і? У звичайному масиві я робив так само і все пахає!

void insert_sort(double arr[], int length);
...
double a[size];
...
insert_sort(a, size);

Було б дивно, якби не працювало.

Підказка

Вектор - це зовсім не масив

11

Re: Векторні масиви у функціях

Масив відрізняється від змінної тип, що може зберігати під одним іменем декілька різних значень.

Масиви які я знаю:

  • звичайний  int a [10]

  • масив створений за допомогою виділення динамічної пам'яті

  • векторний масив  vector <int> a;

Всі вони можуть зберігати різні значення під одним іменем.

Як правильно звернутися у функції до векторного масиву? Чому мій варіант програми працює тільки при роботі з звичайним?

12

Re: Векторні масиви у функціях

По-перше, ви не відповіли не моє запитання. У вас компілятор пише, що

Joker написав:

Векторний масив не передається у функцію

чи це ваше трактування того, що відбувається? Я, здається, однозначно просив текст помилки. Якщо ви не здатні відтворити один рядок тексту, програмування - то не ваше.
По-друге, ви взагалі розумієте, що таке типи змінних?

13

Re: Векторні масиви у функціях

Мені здається що вам краще поки що не чіпати STL, набивайте руку на звичайних масивах

14

Re: Векторні масиви у функціях

Мені здається що вам краще поки що не чіпати STL, набивайте руку на звичайних масивах

Все ж колись доведеться, тому чому не зараз. Для цього я і питаюся про незрозумілі речі тут, на форумі.

По-перше, ви не відповіли не моє запитання. У вас компілятор пише, що

https://cloclo19.cloud.сайт-злодій/weblink/thumb/xw1/bfea8c0eced8/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA.JPG

що таке типи змінних

Так.

чи це ваше трактування того, що відбувається?

Швидше коментування побаченого.
А потрібно,щоб функція відсортувала його.

15

Re: Векторні масиви у функціях

А як ви гадаєте, чому компілятор взагалі намагається перетворити аргумент 1 з типу std::vector<double> на double[] в рядку 31?

16

Re: Векторні масиви у функціях

Ну тоді логічне друге запитання. Як зробити правильно?

17

Re: Векторні масиви у функціях

Я уважно перечитав своє останнє повідомлення і дійшов висновку, що я таки поставив там запитання; а потім уважно перечитав ваше останнє повідомлення і дійшов висновку, що ви побачили в моєму останньому повідомленні якесь твердження. Можете уточнити, яке саме, бо я його там жодним чином не бачу?

18 Востаннє редагувалося Joker (12.08.2014 21:30:20)

Re: Векторні масиви у функціях

Я як завжди не впевнений, але ви мене вчили бути сміливішим.

Тому, що double[] - звичайний масив, а std::vector<double> - векторний.

Якщо я нечайно правий. Тоді як зробити правильно?

19 Востаннє редагувалося 0x9111A (12.08.2014 21:35:52)

Re: Векторні масиви у функціях

Joker написав:

Тому, що double[] - звичайний масив, а std::vector<double> - векторний.

Хтось таки має вам відкрити таємницю, що std::vector<double> зовсім не масив в тому розумінні що double[].
Але це тільки верх айсберга у вашій проблемі
Не лізьте ви в STL, рано вам. А як дуже хочете, от книжка

Подякували: Joker1

20

Re: Векторні масиви у функціях

Не бачу сенсу сперечатися.
Ви праві!!!

Основною метою було передати не масив vector у функцію. Але тепер я користуюсь силками.
Всім дякую.