powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Передача вектора в функцию.
25 сообщений из 64, страница 1 из 3
Передача вектора в функцию.
    #39867570
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется структура Str1. На ее основе делается вектор
Код: plaintext
1.
vector<Str1> vStr1;

и инициализируется - около 1000 значений.
Далее вектор передается в функцию типа int Foo(vector<Str1> vstr), которая должна изменить значения полей структур непосредственно самого вектора vStr1.
Всячески варианты с int Foo(vector<Str1> *vstr) и int Foo(vector<Str1> &vstr) пробовал, но они не идут. Ошибок компиляции-выполнения нет, но на выходе ахинея.)
Как, в итоге, передать вектор в функцию чтобы вектор можно было в ней редактировать?

"Есть многое на свете, друг Горацио, что и не сразу в голову придет."
М. Твен "Приключения Геккельбери Финна"[/color ]
...
Рейтинг: 0 / 0
Передача вектора в функцию.
    #39867582
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAВсячески варианты с int Foo(vector<Str1> *vstr) и int Foo(vector<Str1> &vstr) пробовал, но
они не идут.

Значит плохо пробовал, ибо они единственно верные. Причём второй вернее первого.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Передача вектора в функцию.
    #39867591
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAИмеется структура Str1. На ее основе делается вектор
Код: plaintext
1.
vector<Str1> vStr1;

и инициализируется - около 1000 значений.
Далее вектор передается в функцию типа int Foo(vector<Str1> vstr), которая должна изменить значения полей структур непосредственно самого вектора vStr1.
Всячески варианты с int Foo(vector<Str1> *vstr) и int Foo(vector<Str1> &vstr) пробовал, но они не идут. Ошибок компиляции-выполнения нет, но на выходе ахинея.)
Как, в итоге, передать вектор в функцию чтобы вектор можно было в ней редактировать?

"Есть многое на свете, друг Горацио, что и не сразу в голову придет."
М. Твен "Приключения Геккельбери Финна"[/color ]

Вечер халявы для сутдетов
Код: plaintext
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.
#include "pch.h"
#include <iostream>
#include <vector>
using namespace std;
class Str1
{
public:
	int f1;
	int f2;
};

void Foo(vector<Str1> &  vStr)
{
	vStr.push_back({ 1,2 });
	vStr.push_back({ 3,4 });
	vStr.push_back({ 5,6 });
}

int main()
{
	auto vS = vector<Str1>();
	Foo(vS);

	cout << "Quantity:" << vS.size() << endl;
	for (auto it = vS.begin(); it != vS.end(); ++it)
		cout << " f1:" << (*it).f1 << " f2:" << (*it).f2 << endl;
}


...
Рейтинг: 0 / 0
Передача вектора в функцию.
    #39867596
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё,Спасибо, но все равно ахинея.
Код: plaintext
1.
2.
3.
4.
5.
6.
3	1	2	2019-06-05 12:26:00	23161	23293	132	0	0	11320071475429242422962870476408253745900439793770910684839611498339765268014404936395415376878606539060841232866515822841269990571580063744.	3364531390168509570946593670063403957102172840568483435160286401658880.
4	1	2	2019-06-05 14:42:00	23259	23386	127	0	0	71061053206767231335290419438869451027886880981547709330927643776069469033442112144793532435628496288557050928584222306862363645562622526178436991952205423341655708171533962693422776433178535765826978447360.	8429771835985078174410628294459790600472833518789130913325974186583376241988234811867690212707893510144.
5	1	2	2019-06-06 14:05:00	23610	23695	85	0	0	446081395671004514473158387440660216381247281738051093173779195884108577903292074030635862547519043877453806698526205916499236939099560046252967061089684854267063142039623707857800559963585905183585530639629813775610929217784582291206231119092652704071193423346952478654464.	21120639092390279490016543401216637531519356108297928941445795843131668552525124734886251183756315214997031922628268362749203194371375104.
6	1	2	2019-06-06 14:09:00	23618	23703	85	0	0	inf.0	inf.0
7	1	2	2019-06-07 16:13:00	24147	24625	478	0	0	inf.0	inf.0
8	1	2	2019-06-10 10:00:00	24180	24619	439	0	0	inf.0	inf.0


Редактируются 2 последних столбца.

Функции были отлажены и работали в виде int Foo(), когда вектор был в области видимости и в функцию не передавался.
...
Рейтинг: 0 / 0
Передача вектора в функцию.
    #39867597
L.Otujktd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YUBAИмеется структура Str1. На ее основе делается вектор
Код: plaintext
1.
vector<Str1> vStr1;

и инициализируется - около 1000 значений.
Далее вектор передается в функцию типа int Foo(vector<Str1> vstr), которая должна изменить значения полей структур непосредственно самого вектора vStr1.
Всячески варианты с int Foo(vector<Str1> *vstr) и int Foo(vector<Str1> &vstr) пробовал, но они не идут. Ошибок компиляции-выполнения нет, но на выходе ахинея.)
Как, в итоге, передать вектор в функцию чтобы вектор можно было в ней редактировать?

"Есть многое на свете, друг Горацио, что и не сразу в голову придет."
М. Твен "Приключения Геккельбери Финна"[/color ]
В другой поток случайно не передаете?
...
Рейтинг: 0 / 0
Передача вектора в функцию.
    #39867605
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L.Otujktd, нет, не передаю.
...
Рейтинг: 0 / 0
Передача вектора в функцию.
    #39867606
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAёёёёё,Спасибо, но все равно ахинея.
Код: plaintext
1.
2.
3.
4.
5.
6.
3	1	2	2019-06-05 12:26:00	23161	23293	132	0	0	11320071475429242422962870476408253745900439793770910684839611498339765268014404936395415376878606539060841232866515822841269990571580063744.	3364531390168509570946593670063403957102172840568483435160286401658880.
4	1	2	2019-06-05 14:42:00	23259	23386	127	0	0	71061053206767231335290419438869451027886880981547709330927643776069469033442112144793532435628496288557050928584222306862363645562622526178436991952205423341655708171533962693422776433178535765826978447360.	8429771835985078174410628294459790600472833518789130913325974186583376241988234811867690212707893510144.
5	1	2	2019-06-06 14:05:00	23610	23695	85	0	0	446081395671004514473158387440660216381247281738051093173779195884108577903292074030635862547519043877453806698526205916499236939099560046252967061089684854267063142039623707857800559963585905183585530639629813775610929217784582291206231119092652704071193423346952478654464.	21120639092390279490016543401216637531519356108297928941445795843131668552525124734886251183756315214997031922628268362749203194371375104.
6	1	2	2019-06-06 14:09:00	23618	23703	85	0	0	inf.0	inf.0
7	1	2	2019-06-07 16:13:00	24147	24625	478	0	0	inf.0	inf.0
8	1	2	2019-06-10 10:00:00	24180	24619	439	0	0	inf.0	inf.0


Редактируются 2 последних столбца.

Функции были отлажены и работали в виде int Foo(), когда вектор был в области видимости и в функцию не передавался.
Код покажи. Весь.
...
Рейтинг: 0 / 0
Передача вектора в функцию.
    #39867607
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L.Otujktd, вот результаты той-же Foo(), без передачи в нее вектора.
Код: plaintext
1.
2.
3.
4.
5.
6.
23	1	2	10.07.2019 16:13	24921	25335	414	357.8913329	56.10866711	5127.906932	71.60940533	429.5007382	286.2819276
24	1	2	10.07.2019 17:33	24832	25303	471	358.2976702	112.7023298	5513.170345	74.25072623	432.5483964	284.0469439
25	1	2	10.07.2019 19:18	24791	25210	419	358.7810337	60.21896631	5886.387968	76.72279953	435.5038332	282.0582342
26	1	2	10.07.2019 19:20	24788	25785	997	360.2920523	636.7079477	6418.846007	80.11770096	440.4097532	280.1743513
27	1	2	11.07.2019 11:28	24680	25301	621	362.147348	258.852652	6961.566938	83.43600505	445.583353	278.7113429
28	1	2	11.07.2019 11:30	24630	25300	670	364.405094	305.594906	7525.255574	86.74823096	451.153325	277.656863
...
Рейтинг: 0 / 0
Передача вектора в функцию.
    #39867636
bk0010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребилдол - лекарство от головной боли у программиста: сотрите все объектники и сделайте полную пересборку. Было однажды такое, когда добавил пару полей в тип, по которому создавался вектор.
...
Рейтинг: 0 / 0
Передача вектора в функцию.
    #39867647
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё, ваш код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
class Str1
{
public:
	int f1;
	int f2;
};

void Foo(vector<Str1> &  vStr)
{
	vStr.push_back({ 1,2 });
	vStr.push_back({ 3,4 });
	vStr.push_back({ 5,6 });
}

int main()
{
	auto vS = vector<Str1>();
	Foo(vS);

	cout << "Quantity:" << vS.size() << endl;
	for (auto it = vS.begin(); it != vS.end(); ++it)
		cout << " f1:" << (*it).f1 << " f2:" << (*it).f2 << endl;
}

Теперь унесем вектор и его определение из области видимости функции Foo. Cаму Foo() поместим в класс, оставив в его области видимости только определение Str1
Код: plaintext
1.
2.
3.
4.
5.
6.
struct Str1
{

	int f1;
	int f2;
};

(вектор как public переменная находится в другом классе не состоящем в родственных и никаких отношениях с классом где находится Foo())
И уже в функции определим вектор Foo(vector<Str1> vstr1). И & в представленном виде перестает работать.
...
Рейтинг: 0 / 0
Передача вектора в функцию.
    #39867655
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, все оч. грустно, все это работать не будет.
Код: plaintext
1.
2.
3.
Если вектор имеет определенный пользователем тип данных, то тип должен реализовать соответствующую конструкцию
 копирования, чтобы вектор мог быть модифицирован функцией, где он называется ссылкой, если функция обновляет вектор в 
результате push_back локальной переменной этого UDT...


Передача векторов в функцию, значение vs reference С++
...
Рейтинг: 0 / 0
Передача вектора в функцию.
    #39867659
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAёёёёё, ваш код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
class Str1
{
public:
	int f1;
	int f2;
};

void Foo(vector<Str1> &  vStr)
{
	vStr.push_back({ 1,2 });
	vStr.push_back({ 3,4 });
	vStr.push_back({ 5,6 });
}

int main()
{
	auto vS = vector<Str1>();
	Foo(vS);

	cout << "Quantity:" << vS.size() << endl;
	for (auto it = vS.begin(); it != vS.end(); ++it)
		cout << " f1:" << (*it).f1 << " f2:" << (*it).f2 << endl;
}

Теперь унесем вектор и его определение из области видимости функции Foo. Cаму Foo() поместим в класс, оставив в его области видимости только определение Str1
Код: plaintext
1.
2.
3.
4.
5.
6.
struct Str1
{

	int f1;
	int f2;
};

(вектор как public переменная находится в другом классе не состоящем в родственных и никаких отношениях с классом где находится Foo())
И уже в функции определим вектор Foo(vector<Str1> vstr1). И & в представленном виде перестает работать.
Только что так сделал - все работает отлично.
...
Рейтинг: 0 / 0
Передача вектора в функцию.
    #39867662
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё, коли так, если не затруднит.
Пусть вектор будет, скажем:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
struct Str1
{
string s;
double a;
double b;
double c=0;
}

Заполняем массив vector<Str1> str; кроме str.с.
Далее функция ко всему массиву
Код: plaintext
1.
2.
3.
4.
5.
void Foo(vector<Str1> &str1)
{
int I = str1.size();
for(int i=0;i<I;i++) {str1[i].c = str1[i].a+str[i].b}
}

У меня подобная конструкция по ссылке не работает.
...
Рейтинг: 0 / 0
Передача вектора в функцию.
    #39867666
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAУ меня подобная конструкция по ссылке не работает.
Так и пишет "sorry, this construct does not work" ? Подробнее надо ошибку описывать.

С виду код вполне рабочий, проверяй наполнение вектора, скорее всего там косяк.
...
Рейтинг: 0 / 0
Передача вектора в функцию.
    #39867714
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBA
Код: plaintext
1.
2.
int I = str1.size();
for(int i=0;i<I;i++) {str1[i].c = str1[i].a+str[i].b}


1) str или str1?
2) С++11 и выше:
Код: plaintext
1.
2.
for (auto& v : str1)
    v.c = v.a + v.b;
...
Рейтинг: 0 / 0
Передача вектора в функцию.
    #39867717
teo609
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ёёёёёYUBAёёёёё,Спасибо, но все равно ахинея.
Код: plaintext
1.
2.
3.
4.
5.
6.
3	1	2	2019-06-05 12:26:00	23161	23293	132	0	0	11320071475429242422962870476408253745900439793770910684839611498339765268014404936395415376878606539060841232866515822841269990571580063744.	3364531390168509570946593670063403957102172840568483435160286401658880.
4	1	2	2019-06-05 14:42:00	23259	23386	127	0	0	71061053206767231335290419438869451027886880981547709330927643776069469033442112144793532435628496288557050928584222306862363645562622526178436991952205423341655708171533962693422776433178535765826978447360.	8429771835985078174410628294459790600472833518789130913325974186583376241988234811867690212707893510144.
5	1	2	2019-06-06 14:05:00	23610	23695	85	0	0	446081395671004514473158387440660216381247281738051093173779195884108577903292074030635862547519043877453806698526205916499236939099560046252967061089684854267063142039623707857800559963585905183585530639629813775610929217784582291206231119092652704071193423346952478654464.	21120639092390279490016543401216637531519356108297928941445795843131668552525124734886251183756315214997031922628268362749203194371375104.
6	1	2	2019-06-06 14:09:00	23618	23703	85	0	0	inf.0	inf.0
7	1	2	2019-06-07 16:13:00	24147	24625	478	0	0	inf.0	inf.0
8	1	2	2019-06-10 10:00:00	24180	24619	439	0	0	inf.0	inf.0


Редактируются 2 последних столбца.

Функции были отлажены и работали в виде int Foo(), когда вектор был в области видимости и в функцию не передавался.
Код покажи. Весь.

Поддерживаю. Интересно уже посмотреть код.
Если ахинея - это длинная последовательность цифр, то возможно ошибка в функции вывода, например предполагается вывод строки %s, а в параметрах вместо строки объект, у которого нет преобразования в строку или оно не вызывается.
...
Рейтинг: 0 / 0
Передача вектора в функцию.
    #39867751
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBA,
Ждем твой код. У всех работает
21951094
...
Рейтинг: 0 / 0
Передача вектора в функцию.
    #39867754
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBA, считаю целесообразным изучить макет вашего кода на котором эта ошибка воспроизводится.
...
Рейтинг: 0 / 0
Передача вектора в функцию.
    #39867805
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAёёёёё, коли так, если не затруднит.
Пусть ...
.
Пустая болтовня. Делаешь минимальное приложение, воспроизводящие 'проблему', и выкладываешь сюда.
Только рабочий код, без сказок.
...
Рейтинг: 0 / 0
Передача вектора в функцию.
    #39867895
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAИмеется структура Str1. На ее основе делается вектор
Код: plaintext
1.
vector<Str1> vStr1;

и инициализируется - около 1000 значений.
Далее вектор передается в функцию типа int Foo(vector<Str1> vstr), которая должна изменить значения полей структур непосредственно самого вектора vStr1.
Всячески варианты с int Foo(vector<Str1> *vstr) и int Foo(vector<Str1> &vstr) пробовал, но они не идут. Ошибок компиляции-выполнения нет, но на выходе ахинея.)
Как, в итоге, передать вектор в функцию чтобы вектор можно было в ней редактировать?

"Есть многое на свете, друг Горацио, что и не сразу в голову придет."
М. Твен "Приключения Геккельбери Финна"[/color ]
Такие косяки случаются когда хранимый в контейнере тип не имплементирует необходимые для контейнеров операции по-правильному, скажем оператор копирования или конструктор копирования. Контейнеры это неявно используют, а дефолтная реализация от языка может накосячить с какими-нибудь указателями.
...
Рейтинг: 0 / 0
Передача вектора в функцию.
    #39868011
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну яТакие косяки случаются когда хранимый в контейнере тип не имплементирует необходимые для контейнеров операции по-правильному, скажем оператор копирования или конструктор копирования. Контейнеры это неявно используют, а дефолтная реализация от языка может накосячить с какими-нибудь указателями. Тоже склоняюсь к этому варианту. Тем более, что вопрос вполне описан в
YUBA
Код: plaintext
1.
2.
Если вектор имеет определенный пользователем тип данных, то тип должен реализовать соответствующую конструкцию
 копирования, чтобы вектор мог быть модифицирован функцией, где он называется ссылкой, ...


Передача векторов в функцию, значение vs reference С++ что и имеет место быть.
Думаю попробовать поместить вектор в класс и работать с вектором не непосредственно или по ссылке, а через функции класса имеющие доступ непосредственно к телу вектора.
...
Рейтинг: 0 / 0
Передача вектора в функцию.
    #39868129
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAчто и имеет место быть.
Думаю попробовать поместить вектор в класс и работать с вектором не непосредственно или по ссылке, а через функции класса имеющие доступ непосредственно к телу вектора.а не проще исправить глючный класс в векторе?
...
Рейтинг: 0 / 0
Передача вектора в функцию.
    #39868145
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp, Как? Ошибок в коде нет. Исполнение в норме.
Foo() - работает штатно. Вектор в том-же классе.
Foo(vector<Str1> &vstr1) - полностью идентична, но находится в другом классе и работает со ссылкой на вектор. На выходе функции ахинея, вектор нормально не редактируется.
Мне почти очевидно, что дело не в самом коде, а в
Код: plaintext
1.
2.
Если вектор имеет определенный пользователем тип данных, то тип должен реализовать соответствующую конструкцию
 копирования, чтобы вектор мог быть модифицирован функцией, где он называется ссылкой, ...

Передача векторов в функцию, значение vs reference С++
...
Рейтинг: 0 / 0
Передача вектора в функцию.
    #39868150
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAКак?тебе 10 раз сказали - дать тестовый пример.

YUBAМне почти очевидно, что дело не в самом коде, а ва в классе который написал ты?
...
Рейтинг: 0 / 0
Передача вектора в функцию.
    #39868151
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBA,
Там написано, что класс St1 должен быть с правильными или дефолтными конструкторами.
...
Рейтинг: 0 / 0
25 сообщений из 64, страница 1 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / Передача вектора в функцию.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]