Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 31.05.2017
Сообщений: 74
1

Передача вектора в функцию

20.08.2020, 09:26. Показов 941. Ответов 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
27
28
29
void displayElements(int [] ) ;
void swap (int [], int, int);
int main()
{
int size = 10;; // vector size
int data[size]; // vector of ints
srand( time( 0 ) );
for ( int i = 0; i < size; i++ )
​ ​ ​ data[i] = ( 10 + rand() % 90 ); // 10-99
displayElements (data);
int posFirst = 0;
int posLast = 9;
swap ( data, posFirst, posLast );​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​
displayElements (data);
return 0;
}
void swap ( int array[], int a , int b)
​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ {
​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ int temp;
​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ temp = array [a];
​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ array [a] = array [b];
​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ array [b] = temp;
​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ }
void displayElements (int array [] )
{
​ ​ ​ ​ ​ for ( int i = 0; i < 10; i++ ) // output spaces for alignment
​ ​ ​ ​ ​ ​ cout << array[ i ] << " ";cout << endl;
}
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
void displayElements(const vector <int> &) ;
void swap (vector< int >, int, int);
int main()
{
int size = 10;; // vector size
vector< int > data; // vector of ints
srand( time( 0 ) );
for ( int i = 0; i < size; i++ )
​ ​ ​ data.push_back( 10 + rand() % 90 ); // 10-99
displayElements (data);
int posFirst = 0;
int posLast = 9;
swap ( data, posFirst, posLast );​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​
displayElements (data);
​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ return 0;
}
void swap ( vector< int > array, int a , int b)
​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ {
​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ int temp;
​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ temp = array [a];
​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ array [a] = array [b];
​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ array [b] = temp;
​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ displayElements (array);​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​
​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ }
void displayElements (const vector< int > &array )
{
​ ​ ​ ​ ​ for ( int i = 0; i < 10; i++ ) // output spaces for alignment
​ ​ ​ ​ ​ ​ cout << array[ i ] << " ";cout << endl;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.08.2020, 09:26
Ответы с готовыми решениями:

Передача вектора в функцию
Не могу понять как передать вектор в параметры метода класса. Сама матрица читается с текстового...

Передача вектора в функцию
void foo(vector&lt;int&gt; x) { //Тело функции } void foo(vector&lt;int&gt; &amp;x) { //Тело функции }...

Передача вектора в функцию
вот например функция void f(vector &lt;int&gt; v) { cout &lt;&lt; v.size(); } в нее нужно передать...

Передача вектора в функцию.
Сабж. #include &lt;iostream&gt; #include &lt;vector.h&gt; void show (); // ? int main () { ...

4
С чаем беда...
Эксперт CЭксперт С++
9263 / 4762 / 1289
Регистрация: 18.10.2014
Сообщений: 10,841
20.08.2020, 09:35 2
Где же он одинаковый? В первом случае в swap передается указатель на массив, а во втором - копия вектора. В первом случае вы модифицируете исходный массив через указатель, во втором - постороннюю копию исходного вектора.
1
0 / 0 / 0
Регистрация: 31.05.2017
Сообщений: 74
20.08.2020, 09:38  [ТС] 3
А как передать вектор, чтобы после возврата в main вектор менялся (менялись позициями первый и последний элемент)?
0
С чаем беда...
Эксперт CЭксперт С++
9263 / 4762 / 1289
Регистрация: 18.10.2014
Сообщений: 10,841
20.08.2020, 10:04 4
Лучший ответ Сообщение было отмечено mlippi80 как решение

Решение

Цитата Сообщение от mlippi80 Посмотреть сообщение
А как передать вектор, чтобы после возврата в main вектор менялся
По ссылке, разумеется. Неясно, почему у вас вообще возникает такой вопрос, если вы же сами уже делаете передачу по ссылке в displayElements. Это вообще ваш код?
1
0 / 0 / 0
Регистрация: 31.05.2017
Сообщений: 74
20.08.2020, 10:33  [ТС] 5
Нет частично код заимствовал. Я учусь
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.08.2020, 10:33

Передача вектора в функцию
Сабж. В главной программе есть структура: struct Complex { double Re; double Im; } com; и...

Передача вектора в функцию
Как правильно передавать вектор в функцию? Опускаю подробности его инициализации, проблема в...

Передача вектора в функцию
И снова я сюда) Еще раз всем привет. Как передать ветор в функцию? Пробовал по указателю и ссылке...

Передача вектора по ссылке в функцию
Хочу передать вектор по ссылке в функцию. Вектор создаю такой, как мне нужен. Почему возникает...

Передача вектора структур в функцию
Как передать значение вектора структур в функцию visual? #include &quot;stdafx.h&quot; #include &lt;conio.h&gt;...

Передача вектора в функцию по ссылке
Здравствуйте. Как решить эту ошибку. Ошибка: In member function ‘void...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.