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

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

20.08.2020, 09:26. Показов 1700. Ответов 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
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(); } в нее нужно передать вектор, сразу же в передаче и...

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

Решение

Цитата Сообщение от mlippi80 Посмотреть сообщение
А как передать вектор, чтобы после возврата в main вектор менялся
По ссылке, разумеется. Неясно, почему у вас вообще возникает такой вопрос, если вы же сами уже делаете передачу по ссылке в displayElements. Это вообще ваш код?
1
0 / 0 / 0
Регистрация: 31.05.2017
Сообщений: 74
20.08.2020, 10:33  [ТС]
Нет частично код заимствовал. Я учусь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.08.2020, 10:33
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru