LINUX.ORG.RU

контенеры в С++


0

1

Код: char mas[MAX]; list<char*>s; cin >> mas; s.push_back(mas); //строка в контейнер не вставляется s.push_back(«william»); //вставляется!

Вопрос: почему такая реакция? Ведь в первом случае я передаю через имя массива в push_back() адрес введенной строки...Но не работает. Во втором случае --то же самое через строковый литерал, но срабатывает...


контенеры

контейнеры

Код:

осиль уже тег

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

>Компилятор все сЪедает.

main.cpp:12:23: warning: deprecated conversion from string constant to ‘char*’

FAIL :)

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

1. строка не пустая?
2. что говорит s.size()?
3. вместо char* используй std::string (но подумай как правильно) и будете тебе щастье (возможно)

shty ★★★★★
()
#include <iostream>
#include <list>

using namespace std;

int main() 
{
	char _penis[1024];
	list<char *> penis;
	cin >> _penis;
	penis.push_back(_penis);
	cout << *(penis.begin()) << endl;
}

$ g++ -Wall -Wextra penis.cpp -o penis
$ ./penis 
chlen # keyboard input
chlen

Приведите весь код.

DELIRIUM ☆☆☆☆☆
()
#include <iostream>
#include <list>
#include <limits>
int main(int argc, char** argv)
{
 	char mas[std::numeric_limits<char>::max()]; 
	std::list<char*>s; 
	std::cin >> mas; 
	s.push_back(mas); //строка в контейнер не вставляется (да ну?)
	std::cout << "first pass: " << s.back() << std::endl;
	s.push_back("william");
	std::cout << "second pass: " << s.back() << std::endl;
	return 0;
}

Компилятор ругает строчку с william, но прога выдает таки:

mute@linux-53xg:~/Projects/samples/push> ./push_list 
12345
first pass: 12345
second pass: william

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

Точный код: while(cin >> mas && s[0] != '#') s.push_back(mas); for(p = s.begin(); p != s.end(); p++) cout >> *p; При вводе нескольких строк подряд, выдает последний символ '#'-в кол-ве равном числу строк ? Реакция странная.

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

> Реакция странная.

Это нормальная реакция потому что контейнер у тебя хранит указатели, а не строки.

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

А s тихо незаметно перестал быть listом? «cout >>» faсepalm.dump Мож сначала правильную (работающую) версию написать... Не в одну строчку, например. Не игноря ворнинги и т.д.?

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

> См. коммент выше.

да - он считает, что ему нужен С и без вариантов, и он прав, а вообще он и емакс говном полил, и Gnome, и KDE и много еще чего, вот только аналогов получше он так и не назвал, а писать все на С не дело

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

KDE и GNOME он говном поливал не за выбранный язык или качество кода, а за угрёбищность интерфейса. И, что характерно, он прав.

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

> И, что характерно, он прав.

конечно прав - обосрать что-либо всегда просто

aho
()
Ответ на: комментарий от DELIRIUM

> Вектора там не было)

был STL, но там Линус явно показал, что он давно не в курсе дела

aho
()
Ответ на: комментарий от slackwarrior

Нет, не жалко. Мне интересно, почему размер входного буфера именно std::numeric_limits<char>::max()? Не просто 127, а именно std::numeric_limits<char>::max().

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

> почему размер входного буфера именно std::numeric_limits<char>::max()?

Потому что нужен буфер, равный максимальному значению char.

К.О.

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

Нет. В данном синтетическом примере размер буфера непринципиален ни разу. Просто давно замечено, всё усложнять — фирменный почерк истинного плюсизда.

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

>размер буфера непринципиален ни разу

Написал бы #define MAX <штотатам> истинные плюсисты набижали бы с воплями, что дефаены зло и константы рулят :) А раз неприципиален - твоя претензия принципиально не в кассу.

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