LINUX.ORG.RU
Ответ на: комментарий от DarkEld3r

У сишных массивов есть всё-таки одна мега фича - возможность не указывать размер.

в смысле _явно_ не указывать, а просто 10 эл-тов сделать? типа int a[]={1,2,3,4,5,6,7,8,9,10}; что-ли? тоже-мне - мегафича.

drBatty ★★
()
Ответ на: комментарий от Boy_from_Jungle

указывать не будешь размеры и остальную хрень которая тебя напрягает.

в твоём стеке уже realloc заработал?

drBatty ★★
()
Ответ на: комментарий от drBatty

в твоём стеке уже realloc заработал?

а он там нужен по твоему? или ты хотел типа подловить на том что я не знаю что он на куче выделяет)

Boy_from_Jungle ★★★★
()
Ответ на: комментарий от x0r

удачи костылять для них push_back()

string arr[] = {"раз","два","левой","правой"};
vector<string> vec( arr, arr + sizeof(arr)/sizeof(arr[0]) );
cout << "vector size: "+int_to_string(vec.size())+" | "+vec[0]+" | "+vec[1]+" | "+vec[2]+" | "+vec[3]+"\n" << endl;
makeB
() автор топика
Ответ на: комментарий от makeB

а презервативы ты тоже сначала надеваешь на чужой фаллос, а только потом на свой?

std::vector<std::string> vec = {"one", "two", "three"};
vec.push_back("four");

вопрос 1: зачем тебе std::string arr[]? вопрос 2: где push_back() для сишного массива, о котором шла речь?

x0r ★★★★★
()
Ответ на: комментарий от Boy_from_Jungle

а он там нужен по твоему? или ты хотел типа подловить на том что я не знаю что он на куче выделяет

зачем подлавливать? мне просто интересно, про что ты говоришь? Про динамические массивы? И как ты их на стеке реализуешь? Мне это непонятно. Или всё-же ты о статических массивах? Тогда непонятно, как ты их без размера делаешь?

drBatty ★★
()
Ответ на: комментарий от x0r

Понятно, тогда я неправильно понял тот пост. К тому же только начал осваивать работу с векторами и не знал, что конструкция вида vec = {«one», «two», «three»}; применима и для векторов, я думал что в них только push_back, собственно по этому и написал конвертацию с массива в вектор. Гхм, спасибо за разъяснение, а то я действительно тут в проге конвертил массивы в вектор :D

makeB
() автор топика
Ответ на: комментарий от makeB

конструкция вида vec = {«one», «two», «three"}; применима и для векторов

начиная с С++11, т.е. надо добавлять -std=c++11 при сборке

wota ★★
()
Ответ на: комментарий от Boy_from_Jungle

alloca

и что? Она умеет изменять размер массива? А как ты без изменения push реализуешь?

(не забудь о том, что тот вариант, который можно юзать с кучей(выделить новый большой кусок, и скопировать туда старый) у тебя тут не пройдёт - проблема в том, что нехватка может возникнуть внутри функции, а alloca не умеет в этом случае удалять и создавать массивы, которые созданы выше функции. Т.е. если ты внутри функции выделишь новый массив, он будет уничтожен при выходе, и вызывающая функция либо рухнет, либо будет юзать старую копию)

drBatty ★★
()
Ответ на: комментарий от drBatty

Я тебе и не писал за то что она может изменять размер массива.
Я тебе только писал что она динамически выделяет память на стеке и она сама убъется если закончится скоп.

Т.е. если ты внутри функции выделишь новый массив, он будет уничтожен при выходе, и вызывающая функция либо рухнет, либо будет юзать старую копию)

массив просто сдохнет, ничего не рухнет и никаких старых копий,
главное чтобы стек не «лопнул»

Boy_from_Jungle ★★★★
()
Ответ на: комментарий от Boy_from_Jungle

Я тебе только писал что она динамически выделяет память на стеке и она сама убъется если закончится скоп.

я это и сам прекрасно знаю.

массив просто сдохнет, ничего не рухнет и никаких старых копий,

не сдохнет. Я про вызов внутри функции, в которой alloca

drBatty ★★
()
Ответ на: комментарий от Boy_from_Jungle

ну проверь уже возьми и не парь мне моск)

что проверять? прикажешь мне push на массиве в стеке организовать? дык я уже сказал - я не знаю как. Если ты знаешь - рассказывай или код давай.

ты же обещал:

указывать не будешь размеры и остальную хрень которая тебя напрягает.

вот меня и напрягает тот факт, что размер жёстко фиксирован, и его никак не изменить. Даже внутри функции я не могу удалить массив, что-бы сделать новый побольше. Потому массивы в стеке хуже управляются, чем обычные в куче. Для последних есть REALLOC и можно их удалять в любой момент. Даже внутри внутренней функции.

drBatty ★★
()
Ответ на: комментарий от drBatty

в смысле _явно_ не указывать, а просто 10 эл-тов сделать? типа int a[]={1,2,3,4,5,6,7,8,9,10}; что-ли?

Да, так.

Если массив создаётся на стеке с заранее заданными значениями и никуда не передаётся, то не вижу смысла отказываться от такого мелкого удобства.

std::array чем-то удобнее?

DarkEld3r ★★★★★
()
Ответ на: комментарий от DarkEld3r

std::array чем-то удобнее?

разные фломастеры ИМХО.

drBatty ★★
()
Ответ на: комментарий от DarkEld3r

Так а зачем тебе использовать std::array для такого случая? И в С++ ты вообще можешь сделать так:

auto lst {1,2,3,4,5};
Правда типом lst будет std::initializer_list.

anonymous
()
Ответ на: комментарий от x0r

за тем, что речь шла о _динамических_ массивах.

Неа.

Я отвечал именно на комментарий drBatty о том, что сишные массивы полноценно заменяются vector и array. Второй из них нефига не динамический и (естественно) тоже без пуш_бека.

DarkEld3r ★★★★★
()
Ответ на: комментарий от anonymous

Так а зачем тебе использовать std::array для такого случая?

Так я и не использую. (:

DarkEld3r ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.