|
|
|
| Правильно ли я понимаю, что аналог этого
<?php
$users = array();
function add_user ($nick, $pswd, $email)
{
global $users;
$users[] = array (
'nick' => $nick,
'pswd' => $pswd,
'email' => $email
);
}
?> |
может выглядеть следующим образом
#include <string.h>
struct user { string nick, pswd, email; };
user users[100];
void add_user (nick, pswd, email)
{
user add;
add.nick = nick;
add.pswd = pswd;
add.email = email;
users[] = add;
} |
по мне все правильно... а ругается...
что не так? я заметил что он не понимает []... | |
|
|
|
|
|
|
|
для: bronenos
(07.04.2007 в 20:07)
| | Правильно! Ты ж не сказал ему во-первых, какому элементу массива юзерс функция присваивает значения: нулевому? 99-му? 50-му? поэтому в квадратных скобках указывай номер эл-та массива.
Также нельзя просто присваивать строке значение. есть strcpy(add.nick,nick); - это присваивание строки.
Также при вызове функции не указан тип параметров. nick, pswd, email - это числа? строки? а может дескрипторы?
Сначала исправьте это. Потом, если не будет работать, попробуйте строку users[] = add; - присваивание структур заменить присвоением поэлементно в несколько действий(точно не помню, можно ли структуры присваивать). | |
|
|
|
|
|
|
|
для: alex19921992
(07.04.2007 в 20:27)
| | эт я просто писал не копировал
так у меня стоят типы
void add_user (string nick, string pswd, string email)
вопрос как добавлять в массив
[] в PHP означает добавить в массив еще один элемент с ключом на 1 больше предыдущего... здесь, я полагаю, нет... а как тогда? вот этот вопрос подразумевался под этим топиком
насчет структур
массив имеет тип структуры
насколько я понял каждый его элемент имеет теперь такой же тип
значит можно | |
|
|
|
|
|
|
|
для: bronenos
(07.04.2007 в 20:53)
| | А тут, батенька, надо список писать. Можно конечно массивом обойтись,но надо будет каждый раз его удалять и заводить новый эл-т.
Сам я списки мало писал и советовал бы вам изучать С++ с самого начала, а не браться за списки сразу.
Вообще, в С++, массивы иеют ограниченную длину. Если вам надо увеличить массив, вы его удаляете и заводите пустой с большим количеством элементов.
Если списки уж так нужны, поищите готовые примеры в интернете,так как я могу очень неточно написать, да и если напишу, у вас будет очень много вопросов, я думаю... | |
|
|
|
|
|
|
|
для: alex19921992
(07.04.2007 в 21:01)
| | не хочу использовать списки, мне массив структур подходит для моих целей
в принципе я сейчас так и сделал, храню число записей в переменной и в случае нехватки создаю новый...
но неужели нет методов никаких для вставки значения, как в JavaScript: list.push(item) ? | |
|
|
|
|
|
|
|
для: bronenos
(07.04.2007 в 23:07)
| | Нет, увеличить массив можно удалив его и создав новый. | |
|
|
|
|
|
|
|
для: alex19921992
(08.04.2007 в 05:13)
| | да нет же!
допустим я объявил user users[100];
на 100 пользователей
в данный момент занято допустим 57, я могу поместить еще 43
и оператором [] хочу добавить 58го в общий список
при чем тут увеличить? | |
|
|
|
|
|
|
|
для: bronenos
(08.04.2007 в 09:36)
| | Так можно. Но будет ограничение на кол-во эл-тов в мкассиве(100)
Тебе надо завести переменную, обозначающую, сколько ячеек у тебя занято в массиве. Пусть это i и оно равно 57 чтоб добавить нов. эл-то надо:
проверить, есть ли еще место в массиве if(i<99){}
если нет, то ниче не добавлять. если да, то увеличиваем i на 1, и записываем эл-т в массив.
в итоге получаем:
if(i<99)
{
i++
//добавляем запись в массив[i]
}
|
| |
|
|
|
|
|
|
|
для: alex19921992
(08.04.2007 в 16:12)
| | в принципе я так и сделал
а нельзя ли сделать вроде этого
предупреждаю, что не гарантирую безошибочность, просто изложение мысли
string& operator[] (const string insert)
{
if (size >= sizeof(this)) return;
this[size] = insert;
size++;
}
|
| |
|
|
|
|
|
|
|
для: bronenos
(08.04.2007 в 16:59)
| | Я не понимаю ваш код, в частности, слово тхис, лучше скажите, что он должен делать или предполагаемый механизм его действия | |
|
|
|
|
|
|
|
для: alex19921992
(08.04.2007 в 18:28)
| | заводится внутренний счетчик элементов
при добавлении через [] проверяется количество элементов и вместимость массива
если все в порядке то добавляется ключ со значением и счетчик++
уж очень хочется этот механизм использовать как в пхп...
куча всего крутого и полезного да некоторые элементарные вещи порой приходится самому изобретать и восполнять | |
|
|
|
|
|
|
|
для: bronenos
(08.04.2007 в 16:59)
| | Вы пытаетесь сделать так, чтобы программа на С++ была похожа на программу на PHP. Этот подход неэффективен. На другом языке надо писать, пользуясь стилем этого другого языка.
Опыт программирования на PHP, по-моему, плохой помошник при освоении С++. А хорошими помошниками были бы знание архитектуры компьютера, ассемблера и С. Советую пойти этим путем. Это долго, но это единственный способ научиться писать хорошие программы на С++. | |
|
|
|
|
|
|
|
для: oleg_alexeev
(08.04.2007 в 19:00)
| | в данном случае проблема иная
в стандартном массиве не предусмотрено средств для вставки данных
или [] или .push()
и приходится отдельно хранить в лучшем случае число
ладно, я понял что пытаюсь сделать адаптацию алгоритма.. но то что я пытался сделать с оператором... этого не осуществить?
видно это последний мой вопрос в данной теме | |
|
|
|
|
|
|
|
для: bronenos
(08.04.2007 в 19:15)
| | Сделать добавление в стиле PHP не получится. Но у стандарного класса std::vector есть удобный метод, похожий на то, что Вам нужно - push_back() (добавляет элемент в конец массива и, если надо, увеличивает размер массива):
#include <string>
#include <vector>
struct user { std::string nick, pswd, email; };
std::vector<user> users;
void add(std::string &nick, std::string &pswd, std::string &email)
{
user u;
u.nick = nick;
u.pswd = pswd;
u.email = email;
users.push_back(u);
}
|
| |
|
|
|
|
|
|
|
для: oleg_alexeev
(08.04.2007 в 20:35)
| | пара вопросов
1. в квадратных скобках указывается имя структуры... а только имя структуры можно задавать?
2. почему в функцию передается у вас ссылка
надо число копировать значения ведь | |
|
|
|
|
|
|
|
для: oleg_alexeev
(08.04.2007 в 20:35)
| | пара вопросов
1. в квадратных скобках указывается имя структуры... а только имя структуры можно задавать?
2. почему в функцию передается у вас ссылка
надо число копировать значения ведь | |
|
|
|
|
|
|
|
для: bronenos
(08.04.2007 в 21:44)
| | В квадратных скобках указывается номер элемента массива | |
|
|
|
|
|
|
|
для: alex19921992
(09.04.2007 в 04:50)
| | Интересно, могу ли я, теоретически, вооружившись достаточным количеством знаний, написать свой класс для организации массивов, чтобы был и внутренний счетчик занятых элементов, и счетчик вместимости, и операции вставки в конец, в начало и т. д. в виде методов? | |
|
|
|
|
|
|
|
для: bronenos
(09.04.2007 в 14:03)
| | на с++ все можно | |
|
|
|