Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
EfimKR
 Аватар для EfimKR
53 / 26 / 10
Регистрация: 24.06.2014
Сообщений: 229
Записей в блоге: 1
#1

Что применить "\n" или "endl"? - C++

06.07.2014, 12:12. Просмотров 1039. Ответов 24
Метки нет (Все метки)

Эти две операции похожи - они переходят на новую строку. Но endl очищает буфер, но при этом дольше выполняется.
Так что же лучше применять?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.07.2014, 12:12     Что применить "\n" или "endl"?
Посмотрите здесь:

C++ Дан текст, хранящийся в текстовом файле f, каждый символ которого может быть малой буквой, цифрой или одним из знаков "+", "-", "*".
Что означают команды "fun", "my_max", "my_min" в C++? C++
Необработанное исключение в "0x00414558" в "467.exe": 0xC0000005: Нарушение прав доступа при чтении "0xabababbb" C++
Написать программу, которая запрашивает у пользователя номер дня недели и выводит одно из сообщений: "Рабочий день","Суббота" или "Воскресенье" C++
C++ я задал произвольный текст длинной 5 строк, и допустим что я ввел 5 раз букву "П" , какой цикл нужно создать чтобы пометять букву "П" на букву "Р" ?
C++ С++ консольное приложение win32, матерится на первое "pow" после "if", а на "system" говорит что неопределён.
C++ В массиве структур студент с полями "ИМЯ" "ВОЗРАСТ" "УСПЕВАЕМОСТЬ" выполнить сортировку по успеваемости по возрастанию
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2451 / 1623 / 238
Регистрация: 24.11.2012
Сообщений: 3,993
06.07.2014, 12:18     Что применить "\n" или "endl"? #2
std::endl - для единообразия. Оптимизировать вывод за счет этого - только по указанию профайлера.
dimabubyakin
 Аватар для dimabubyakin
158 / 123 / 44
Регистрация: 16.10.2013
Сообщений: 1,734
Завершенные тесты: 5
06.07.2014, 12:18     Что применить "\n" или "endl"? #3
я предпочитаю endl, тут уж на ваш вкус)
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
06.07.2014, 13:12     Что применить "\n" или "endl"? #4
Если нужно просто вывести многострочный текст, то удобнее написать
C++
1
"one\ntwo\nthree"
чем
C++
1
"one" << endl << "two" << endl << "three"
И, кстати, поток, насколько я знаю, совершенно спокойно может флашнуться и по "\n".
Avazart
 Аватар для Avazart
7037 / 5214 / 259
Регистрация: 10.12.2010
Сообщений: 22,921
Записей в блоге: 17
06.07.2014, 14:06     Что применить "\n" или "endl"? #5
Tulosba, а выглядит удобнее ли ?

Я пишу так
C++
1
2
3
<< "one" << endl 
<< "two" << endl 
<< "three"
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
06.07.2014, 14:12     Что применить "\n" или "endl"? #6
Avazart, могу предложить альтернативный вариант:
C++
1
2
3
<< "one\n"
<< "two\n"
<< "three"
Потому что явно флашить поток наверное все таки не стоит в этом случае.
P.s. Кстати можно и без << во второй, третьей строках.
Muhhekaneok
0 / 0 / 0
Регистрация: 30.06.2014
Сообщений: 1
06.07.2014, 15:14     Что применить "\n" или "endl"? #7
Цитата Сообщение от Tulosba Посмотреть сообщение
флашить поток
Подскажите пожалуйста, что означает данная терминология? Я далеко не программист потому что, поэтому задаю такой вопрос.
Avazart
 Аватар для Avazart
7037 / 5214 / 259
Регистрация: 10.12.2010
Сообщений: 22,921
Записей в блоге: 17
06.07.2014, 15:21     Что применить "\n" или "endl"? #8
Цитата Сообщение от Muhhekaneok Посмотреть сообщение
Подскажите пожалуйста, что означает данная терминология? Я далеко не программист потому что, поэтому задаю такой вопрос.
http://www.cplusplus.com/reference/o...ostream/flush/
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
06.07.2014, 15:23     Что применить "\n" или "endl"? #9
Манипулятор std::endl, помимо того, что добавляет перевод строки в поток, еще и вызывает функцию flush(), которая производит, непосредственно, запись всех еще не записанных данных в поток.
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
06.07.2014, 16:15     Что применить "\n" или "endl"? #10
Да и так должно сработать:
C++
1
2
3
std::cout << "one\n"
             "two\n"
             "three";
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
06.07.2014, 16:16     Что применить "\n" или "endl"? #11
Цитата Сообщение от GuGo1991 Посмотреть сообщение
Да и так должно сработать:
Цитата Сообщение от Tulosba Посмотреть сообщение
Кстати можно и без << во второй, третьей строках.
собственно
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
06.07.2014, 16:21     Что применить "\n" или "endl"? #12
Цитата Сообщение от Tulosba Посмотреть сообщение
P.s. Кстати можно и без << во второй, третьей строках.
Подумал вы не имели ввиду свой вариант
fio
 Аватар для fio
10 / 10 / 3
Регистрация: 16.06.2014
Сообщений: 45
06.07.2014, 16:31     Что применить "\n" или "endl"? #13
endl работает дольше, поэтому его не стоит применять в программах, выводящих много строк и ограниченных по времени выполнения. А ещё набор "\n" требует меньшего количества нажатий на клавиатуре
Впрочем, если речь идёт о скорости, лучше вообще применять сstdio вместо iostream.
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12537 / 7099 / 797
Регистрация: 27.09.2012
Сообщений: 17,521
Записей в блоге: 2
Завершенные тесты: 1
06.07.2014, 18:21     Что применить "\n" или "endl"? #14
C++
1
   (std::cout << "one" << std::cout.widen('\n') << "two" << std::cout.widen('\n') << "three").flush() ;
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
06.07.2014, 19:41     Что применить "\n" или "endl"? #15
Croessmah, какую цель ты преследуешь этим кодом?
C++
1
std::cout.widen('\n')
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12537 / 7099 / 797
Регистрация: 27.09.2012
Сообщений: 17,521
Записей в блоге: 2
Завершенные тесты: 1
06.07.2014, 19:57     Что применить "\n" или "endl"? #16
Цитата Сообщение от Tulosba Посмотреть сообщение
Croessmah, какую цель ты преследуешь этим кодом?
преобразование к внутреннему представлению, например, если используется нестандартная локаль со своим представлением и своим фацетом ctype. Хотя, наверное, при "\n" тоже будет преобразовано в операторе, но фиг его знает.
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
06.07.2014, 21:25     Что применить "\n" или "endl"? #17
Цитата Сообщение от Croessmah Посмотреть сообщение
например, если используется нестандартная локаль со своим представлением и своим фацетом ctype.
Т.е. допускаешь такой вариант, что "\n" при выводе в поток выполнит не перевод строки, а что-то другое?
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12537 / 7099 / 797
Регистрация: 27.09.2012
Сообщений: 17,521
Записей в блоге: 2
Завершенные тесты: 1
06.07.2014, 21:51     Что применить "\n" или "endl"? #18
Цитата Сообщение от Tulosba Посмотреть сообщение
Т.е. допускаешь такой вариант, что "\n" при выводе в поток выполнит не перевод строки, а что-то другое?
Например вот:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <locale>
 
 
class MyFacet : public std::ctype<char>
{
protected:
   char_type do_widen (char c) const {
      return 'X' ;
   }
} ;
 
 
int main() {
   std::cout.imbue ( std::locale ( std::cout.getloc() , new MyFacet ) ) ;
   std::cout << std::cout.widen('\n') ;
   std::cout << '\n' ;
}
учитывается поведение для установленной локали.

Добавлено через 6 минут
Так же и манипулятор endl - выводит с помощью widen интернационализированный символ перевода строки.
Другими словами, widen сделает из переданного символа char символ char_type.
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
06.07.2014, 21:55     Что применить "\n" или "endl"? #19
Croessmah, так это из-за widen выводится Х, а не наоборот. "Голая" версия нормально переводит строку и по '\n'.
Кстати, почему-то gcc выводит только один Х:
http://ideone.com/T3f5gS
А студия - два.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2014, 22:22     Что применить "\n" или "endl"?
Еще ссылки по теме:

Visual Studio не читает операторы, что начинаются на "glu" ("gluBuild2DMipmaps", "gluPerspective") C++
Зачем перегружать операторы "++", "<<", ">>" и что они дают? C++
Написать функцию поиска человека по полю "фамилия" в массиве структур "Note" ("Персональная информация") C++
Определить, какая из точек "В" или "С" расположены ближе к точке "А". C++
Вывести на экран фразу "Мне n лет", учитывая что при некоторых значениях n слово "лет" надо заменить на "год" C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12537 / 7099 / 797
Регистрация: 27.09.2012
Сообщений: 17,521
Записей в блоге: 2
Завершенные тесты: 1
06.07.2014, 22:22     Что применить "\n" или "endl"? #20
Цитата Сообщение от Tulosba Посмотреть сообщение
"Голая" версия нормально переводит строку и по '\n'.
"Голая" версия не учитывает моих пожеланий
Цитата Сообщение от Tulosba Посмотреть сообщение
Кстати, почему-то gcc выводит только один Х:
Скорее всего оптимизация при выводе, и используется интервальная версия do_widen:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class MyFacet : public std::ctype<char>
{
public:
   char_type widen ( char c ) const {
      return this->do_widen(c) ;
   }
protected:
   char_type do_widen (char c) const {
      return (c=='\n'?'X':c) ;
   }
   const char* do_widen (const char* low, const char* high, char_type* to) const {
      for ( ; low != high ; ++low , ++to )
      if ( *low == '\n' )
         *to = 'X' ;
      else
         *to = *low ;
      return high ;
   }
} ;
Yandex
Объявления
06.07.2014, 22:22     Что применить "\n" или "endl"?
Ответ Создать тему
Опции темы

Текущее время: 06:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru