Суть такова:
Когда я запихиваю объекты класса в array, я получаю список с копиями этих объектов. А мне нужно запихать туда именно сами объекты, чтобы я мог работать с ними(изменять) как по индексу(целочисленные индексы мне будет проще передавать в функцию диалога, чем с десяток объектов класса), так и по имени. В общем как надо правильно запихнуть в контейнер STL именно адреса объектов? Тем более, что, возможно, мне понадобится много разных списков(допустим, списки знакомых и незнакомых главному герою неписей) для работы с одними и теми же объектами и нет смысла тратить память. В общем, как правильно передать объекты класса по ссылке в список? Или составить список ссылок на объекты. Надеюсь, я понятно выразился. Беглый гуглинг почему-то не помог. А в хвалённых мной видеоуроках пока все эти контейнеры используются исключительно для интов и без переменных.
[Spoiler (click to open)]
using namespace std;
class human
{
public:
human()
{
name = "Noname"; lastname = "Noname"; age = 20;
}
human(string name, string lastname, short age)
{
this->name = name; this->age = age; this->lastname = lastname;
}
// Геттеры, сеттеры и функции
string GetName() { return name; }
string GetLastname() { return lastname; }
short GetAge() { return age; }
void SetLastname(string name) { this->name = name; }
void PrintData() { cout << name << " " << lastname << " " << age << " лет" << endl; }
// переменные
private:
string name;
string lastname;
short age;
};
class npc : public human
{
public:
npc(string name, string lastname, short age) :human(name, lastname, age) {}
npc() {}// Без конструктора по умолчанию не засунуть в вектор или аррау
};
class player : public human
{
public:
player(string name, string lastname, short age) :human(name, lastname, age) {}
};
array < npc, 10 > npc_arr;
int main()
{
setlocale(LC_ALL, "Russian");
npc woman("Шерон", "Стоун", 38);
npc woman2("Элизабет", "Тейлор", 38);
npc_arr[0] = woman;
npc_arr[1] = woman2;
npc_arr[0].SetLastname("Наташа");//Изменили имя
woman.PrintData();//но исходный объект остался прежним
npc_arr[0].PrintData();//А вот в аррау копия изменилась, то есть происходит копирование по значению.
player gamer("Лекс", "Дэвидсон", 36);
string pathtofile = "1\\text123.txt";
system("pause");
return 0;
}
И вопрос по питону (там я ещё даже до классов не дошёл).
В каких случаях надо применять '\n', а в каких '\\n'?
Ведь перевод строки именно '\n', а '\\n' - хз что.
[Spoiler (click to open)]
import urllib.request
goog_url = 'http://www.sample-videos.com/csv/Sample-Spreadsheet-5000-rows.csv'
def download_stock_data(csv_url):
response = urllib.request.urlopen(csv_url)
csv = response.read()
csv_str = str(csv)
lines = csv_str.split('\\n') #Совершенно непонятно почему 2 слэша
dest_url = r'goog.csv'
fx = open(dest_url, 'w')
for line in lines:
fx.write(line + '\n')
fx.close()
download_stock_data(goog_url)
May 5 2018, 08:15:08 UTC 1 day ago
По STL не подскажу, знаю еще меньше тебя. :-) Судя по коду, операция индексации действительно создает копию объекта и добавляет в массив (список). Может, в array <> есть методы прямого доступа к указателю на указанный объект - элемент массива.
May 5 2018, 08:20:58 UTC 1 day ago
И да, строки с массивами в С++ не однозначны.
1 day ago
1 day ago
1 day ago
1 day ago
1 day ago
1 day ago
1 day ago
1 day ago
1 day ago
1 day ago
May 5 2018, 08:23:27 UTC 1 day ago
May 5 2018, 08:33:35 UTC 1 day ago
1 day ago
1 day ago
1 day ago
May 5 2018, 08:24:22 UTC 1 day ago Edited: May 5 2018, 08:26:36 UTC
Давно не пользовался с++
Не поможет в данном случает приведение типа указателя к int ?
https://ru.wikipedia.org/wiki/Приведение_типа#Приведения_типов_в_языке_C++
May 5 2018, 08:35:21 UTC 1 day ago
May 5 2018, 09:04:06 UTC 1 day ago
Пример запутанный и неудачный
"\n" дает символ с кодом 0x0A, такой сплит разбивает по концам строк, как и положено. Но тут он не используется :-)
"\\n" дает строку с двумя символами подряд "\" "n"
Файл, который забирается в примере, тянется по урл. В результате получается одна длинная строка, в которой концы строк исходного файла помечены четырьмя символами "\" "r" "\" "n" (НЕ кодами перевода строки, а только их изображением из четырех символов подряд)
Дальше эта длинная строка делится на отдельные по последовательности "\" "n"
А \r так и остаются болтаться в получившихся строках.
Правильно там вообще должно быть
lines = csv_str.split('\\r\\n')
May 5 2018, 09:33:55 UTC 1 day ago Edited: May 5 2018, 09:36:00 UTC
Я правильно понял?
1 day ago
May 5 2018, 09:40:59 UTC 1 day ago
May 5 2018, 09:46:12 UTC 1 day ago Edited: May 5 2018, 09:48:29 UTC
May 5 2018, 11:15:21 UTC 1 day ago
1 day ago
May 5 2018, 10:26:41 UTC 1 day ago Edited: May 5 2018, 10:29:05 UTC
May 5 2018, 10:44:58 UTC 1 day ago
1 day ago
1 day ago
1 day ago
May 5 2018, 11:23:35 UTC 1 day ago Edited: May 5 2018, 11:39:41 UTC
Землю должен копать робот-землекоп, а программировать - робот-программист. Эффективность потому что выше.
Кстати, почему левые не празднуют 200-летие дедушки Маркса? Странно.
Вон даже провертикальновластный "Взгляд" отжигает: Учение Маркса совпало с цивилизационным кодом русского народа.
May 5 2018, 12:25:18 UTC 1 day ago
1 day ago
1 day ago
1 day ago
1 day ago
1 day ago
1 day ago
1 day ago
1 day ago
May 5 2018, 13:48:48 UTC 1 day ago
Если тебе нужен список объектов, то есть такая функция emplace_back(). Она сразу выделяет нужное количество памяти, помещает в список (массив) и инициализирует объект, все это делает без создания всяких копий, например:
list humans;
humans.emplace_back( параметры как у конструктора ); //вот тут выделяется память, создает элемент списка и инициализируется объект
Также я тебе советую передавать объекты функциям по ссылке: Human( const string& name ); тогда меньше накладных расходов.
Еще у тебя геттер: string GetName() { return name; }
Правильнее будет: const string& GetName() { return name; } Возвращать ссылку
May 5 2018, 16:26:08 UTC 1 day ago
Это пример того, что надо бежать от С++ куда подальше, даже в визуал бейсик. :-) В 90-е я вообще доходил до абсурда:
template const matrix _MP & _MF matrix::
operator = (const matrix _MP & Matrix) const { }
Сейчас смотрю, как баран на ворота, на все эти const. _MP и _MF я придумал как define для модификаторов Borland C++, вдруг пригодится в будущем. :-)
1 day ago
1 day ago
1 day ago
1 day ago
1 day ago
1 day ago
1 day ago
1 day ago
1 day ago
1 day ago
1 day ago