Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
EfimKR
55 / 28 / 13
Регистрация: 24.06.2014
Сообщений: 247
Записей в блоге: 1
1

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

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

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

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно"
В зависимости от времени года "весна", "лето", "осень", "зима" определить...

Для каждой строки найти слова, которые не имеют ни одного из букв: "l", "k", "r", "s" i "j"
Задано символьные строки. Строка состоит из нескольких слов (наборов символов),...

Вставить пробел после каждого символа "." "," "!" или "?", если за этими символами не следует пробел
Вставить пробел после каждого символа "." "," "!" или "?", если за этими...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование)
Разработать программу с использованием наследования классов, реализующую...

С++ консольное приложение win32, матерится на первое "pow" после "if", а на "system" говорит что неопределён.
#define _CRT_SECURE_NO_WARNINGS #include "stdafx.h" #include <math.h> ...

24
0x10
2571 / 1751 / 288
Регистрация: 24.11.2012
Сообщений: 4,377
06.07.2014, 12:18 2
std::endl - для единообразия. Оптимизировать вывод за счет этого - только по указанию профайлера.
0
dimabubyakin
160 / 121 / 85
Регистрация: 16.10.2013
Сообщений: 1,738
Завершенные тесты: 5
06.07.2014, 12:18 3
я предпочитаю endl, тут уж на ваш вкус)
0
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
06.07.2014, 13:12 4
Если нужно просто вывести многострочный текст, то удобнее написать
C++
1
"one\ntwo\nthree"
чем
C++
1
"one" << endl << "two" << endl << "three"
И, кстати, поток, насколько я знаю, совершенно спокойно может флашнуться и по "\n".
0
Avazart
Эксперт С++
7722 / 5631 / 549
Регистрация: 10.12.2010
Сообщений: 25,401
Записей в блоге: 17
06.07.2014, 14:06 5
Tulosba, а выглядит удобнее ли ?

Я пишу так
C++
1
2
3
<< "one" << endl 
<< "two" << endl 
<< "three"
1
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
06.07.2014, 14:12 6
Avazart, могу предложить альтернативный вариант:
C++
1
2
3
<< "one\n"
<< "two\n"
<< "three"
Потому что явно флашить поток наверное все таки не стоит в этом случае.
P.s. Кстати можно и без << во второй, третьей строках.
1
Muhhekaneok
0 / 0 / 0
Регистрация: 30.06.2014
Сообщений: 1
06.07.2014, 15:14 7
Цитата Сообщение от Tulosba Посмотреть сообщение
флашить поток
Подскажите пожалуйста, что означает данная терминология? Я далеко не программист потому что, поэтому задаю такой вопрос.
0
Avazart
Эксперт С++
7722 / 5631 / 549
Регистрация: 10.12.2010
Сообщений: 25,401
Записей в блоге: 17
06.07.2014, 15:21 8
Цитата Сообщение от Muhhekaneok Посмотреть сообщение
Подскажите пожалуйста, что означает данная терминология? Я далеко не программист потому что, поэтому задаю такой вопрос.
http://www.cplusplus.com/reference/ostream/ostream/flush/
1
soon
2546 / 1311 / 177
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
06.07.2014, 15:23 9
Манипулятор std::endl, помимо того, что добавляет перевод строки в поток, еще и вызывает функцию flush(), которая производит, непосредственно, запись всех еще не записанных данных в поток.
2
GuGo1991
269 / 263 / 146
Регистрация: 02.08.2012
Сообщений: 609
06.07.2014, 16:15 10
Да и так должно сработать:
C++
1
2
3
std::cout << "one\n"
             "two\n"
             "three";
0
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
06.07.2014, 16:16 11
Цитата Сообщение от GuGo1991 Посмотреть сообщение
Да и так должно сработать:
Цитата Сообщение от Tulosba Посмотреть сообщение
Кстати можно и без << во второй, третьей строках.
собственно
0
GuGo1991
269 / 263 / 146
Регистрация: 02.08.2012
Сообщений: 609
06.07.2014, 16:21 12
Цитата Сообщение от Tulosba Посмотреть сообщение
P.s. Кстати можно и без << во второй, третьей строках.
Подумал вы не имели ввиду свой вариант
0
fio
10 / 10 / 4
Регистрация: 16.06.2014
Сообщений: 45
06.07.2014, 16:31 13
endl работает дольше, поэтому его не стоит применять в программах, выводящих много строк и ограниченных по времени выполнения. А ещё набор "\n" требует меньшего количества нажатий на клавиатуре
Впрочем, если речь идёт о скорости, лучше вообще применять сstdio вместо iostream.
0
Croessmah
++Ͻ
14611 / 8365 / 1576
Регистрация: 27.09.2012
Сообщений: 20,561
Записей в блоге: 2
Завершенные тесты: 1
06.07.2014, 18:21 14
C++
1
   (std::cout << "one" << std::cout.widen('\n') << "two" << std::cout.widen('\n') << "three").flush() ;
1
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
06.07.2014, 19:41 15
Croessmah, какую цель ты преследуешь этим кодом?
C++
1
std::cout.widen('\n')
0
Croessmah
++Ͻ
14611 / 8365 / 1576
Регистрация: 27.09.2012
Сообщений: 20,561
Записей в блоге: 2
Завершенные тесты: 1
06.07.2014, 19:57 16
Цитата Сообщение от Tulosba Посмотреть сообщение
Croessmah, какую цель ты преследуешь этим кодом?
преобразование к внутреннему представлению, например, если используется нестандартная локаль со своим представлением и своим фацетом ctype. Хотя, наверное, при "\n" тоже будет преобразовано в операторе, но фиг его знает.
0
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
06.07.2014, 21:25 17
Цитата Сообщение от Croessmah Посмотреть сообщение
например, если используется нестандартная локаль со своим представлением и своим фацетом ctype.
Т.е. допускаешь такой вариант, что "\n" при выводе в поток выполнит не перевод строки, а что-то другое?
0
Croessmah
++Ͻ
14611 / 8365 / 1576
Регистрация: 27.09.2012
Сообщений: 20,561
Записей в блоге: 2
Завершенные тесты: 1
06.07.2014, 21:51 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.
0
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
06.07.2014, 21:55 19
Croessmah, так это из-за widen выводится Х, а не наоборот. "Голая" версия нормально переводит строку и по '\n'.
Кстати, почему-то gcc выводит только один Х:
http://ideone.com/T3f5gS
А студия - два.
0
Croessmah
++Ͻ
14611 / 8365 / 1576
Регистрация: 27.09.2012
Сообщений: 20,561
Записей в блоге: 2
Завершенные тесты: 1
06.07.2014, 22:22 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 ;
   }
} ;
2
06.07.2014, 22:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2014, 22:22

Что Вы понимаете под "абстрактным типом", "абстракцией данных" и "абстрактными операциями"?
А давайте займёмся археологией! И проследим как менялся смысл понятий...

Visual Studio не читает операторы, что начинаются на "glu" ("gluBuild2DMipmaps", "gluPerspective")
Данный код должен выводить на экран кубик который должен вращаться, но возникла...

Дан текст, хранящийся в текстовом файле f, каждый символ которого может быть малой буквой, цифрой или одним из знаков "+", "-", "*".
Дан текст, хранящийся в текстовом файле f, каждый символ которого может быть...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru