감동적인 "C++ 파일 읽어오기 코드"...

cppig1995의 이미지

이 코드를 보고 감동받았습니다.

#include <fstream>
#include <iterator>
#include <string>

using namespace std;

string ReadStringFromFile(string inputFile)
{
	return string((istreambuf_iterator<char>(ifstream(inputFile))),
		      (istreambuf_iterator<char>()));
}
lifthrasiir의 이미지

cppig1995 wrote:
이 코드를 보고 감동받았습니다.

#include <fstream>
#include <iterator>
#include <string>

using namespace std;

string ReadStringFromFile(string inputFile)
{
	return string((istreambuf_iterator<char>(ifstream(inputFile))),
		      (istreambuf_iterator<char>()));
}

그 정도로 감동하시면 C++의 iterator를 우습게 보신 겁니다. 저는 이런 걸 좋아합니다.

#include <iostream>

#define t template
#define S struct
#define i int
#define s static const int

#define T(x,y,z)t<i n,i a>S x<n,a,y>{z;};

t<i n,i a,i d>S c:c<n,a-1,n%a>{};
t<i n,i a,i d>S N{s v=N<n,(2*a+d)/2,n/(a+d/2)-(2*a+d)/2>::v;};
T(c,0,)T(N,0,s v=a)T(N,1,s v=a)T(N,-1,s v=a-1)
t<i n>S c<n,1,1>{c(){std::cout<<n<<std::endl;}};
t<i n>S C:C<n-1>,c<n,N<n,2,n/2-2>::v,1>{};
t<>S C<1>{};C<125>a;

main() {}

- 토끼군

Fe.head의 이미지

cppig1995 wrote:
이 코드를 보고 감동받았습니다.

#include <fstream>
#include <iterator>
#include <string>

using namespace std;

string ReadStringFromFile(string inputFile)
{
	return string((istreambuf_iterator<char>(ifstream(inputFile))),
		      (istreambuf_iterator<char>()));
}

이코드를 풀어서 보여주시면 안되나요?
상당히 어렵군요. :(

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

cppig1995의 이미지

#include <fstream> 
#include <iterator> 
#include <string> 

using namespace std; 

string ReadStringFromFile(string inputFile) 
{ 
  ifstream fileStream(inputFile);
  istreambuf_iterator<char> iteratorWithStream(fileStream);
  istreambuf_iterator<char> emptyIterator;
  string s(iteratorWithStream, emptyIterator);
  return s;
}

Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.

cronex의 이미지

tokigun wrote:
cppig1995 wrote:
이 코드를 보고 감동받았습니다.

#include <fstream>
#include <iterator>
#include <string>

using namespace std;

string ReadStringFromFile(string inputFile)
{
	return string((istreambuf_iterator<char>(ifstream(inputFile))),
		      (istreambuf_iterator<char>()));
}

그 정도로 감동하시면 C++의 iterator를 우습게 보신 겁니다. 저는 이런 걸 좋아합니다.

#include <iostream>

#define t template
#define S struct
#define i int
#define s static const int

#define T(x,y,z)t<i n,i a>S x<n,a,y>{z;};

t<i n,i a,i d>S c:c<n,a-1,n%a>{};
t<i n,i a,i d>S N{s v=N<n,(2*a+d)/2,n/(a+d/2)-(2*a+d)/2>::v;};
T(c,0,)T(N,0,s v=a)T(N,1,s v=a)T(N,-1,s v=a-1)
t<i n>S c<n,1,1>{c(){std::cout<<n<<std::endl;}};
t<i n>S C:C<n-1>,c<n,N<n,2,n/2-2>::v,1>{};
t<>S C<1>{};C<125>a;

main() {}

- 토끼군


개인적으로 그런 식의 코딩은 별로 않좋아합니다.
가독성이 너무 떨어지기 때문이죠.
분석하려면 일일이 다 하나씩 변환 해놓고 봐야한다는....

------------------------------------------------------------
이 멍청이~! 나한테 이길 수 있다고 생각했었냐~?
광란의 귀공자 데코스 와이즈멜 님이라구~!

lifthrasiir의 이미지

fe.practice wrote:
cppig1995 wrote:
이 코드를 보고 감동받았습니다.

#include <fstream>
#include <iterator>
#include <string>

using namespace std;

string ReadStringFromFile(string inputFile)
{
	return string((istreambuf_iterator<char>(ifstream(inputFile))),
		      (istreambuf_iterator<char>()));
}

이코드를 풀어서 보여주시면 안되나요?
상당히 어렵군요. :(

istreambuf_iterator<T>는 istream으로부터 자료형 T에 해당하는 내용을 계속 읽는 iterator입니다. istreambuf_iterator<T>()는 placeholder로, iterator의 끝 지점을 의미합니다. 따라서 위와 같이 하면 string 임시 객체에는 inputFile로부터 char를 하나 하나씩 읽어 온 내용이 들어 가겠죠.

cronex wrote:
개인적으로 그런 식의 코딩은 별로 않좋아합니다.
가독성이 너무 떨어지기 때문이죠.
분석하려면 일일이 다 하나씩 변환 해놓고 봐야한다는....

제가 괜히 obfuscation을 좋아 하는 줄 아시나요? =3=333

- 토끼군

Fe.head의 이미지

tokigun wrote:
fe.practice wrote:
cppig1995 wrote:
이 코드를 보고 감동받았습니다.

#include <fstream>
#include <iterator>
#include <string>

using namespace std;

string ReadStringFromFile(string inputFile)
{
	return string((istreambuf_iterator<char>(ifstream(inputFile))),
		      (istreambuf_iterator<char>()));
}

이코드를 풀어서 보여주시면 안되나요?
상당히 어렵군요. :(

istreambuf_iterator<T>는 istream으로부터 자료형 T에 해당하는 내용을 계속 읽는 iterator입니다. istreambuf_iterator<T>()는 placeholder로, iterator의 끝 지점을 의미합니다. 따라서 위와 같이 하면 string 임시 객체에는 inputFile로부터 char를 하나 하나씩 읽어 온 내용이 들어 가겠죠.


아 그렇군요.
답변 감사합니다.

하지만 역설적으로 저 소스는 보통의 프로그래머한테는 좋은 소스 같지 않군요.

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

나는오리의 이미지

fe.practice wrote:
tokigun wrote:
fe.practice wrote:
cppig1995 wrote:
이 코드를 보고 감동받았습니다.

#include <fstream>
#include <iterator>
#include <string>

using namespace std;

string ReadStringFromFile(string inputFile)
{
	return string((istreambuf_iterator<char>(ifstream(inputFile))),
		      (istreambuf_iterator<char>()));
}

이코드를 풀어서 보여주시면 안되나요?
상당히 어렵군요. :(

istreambuf_iterator<T>는 istream으로부터 자료형 T에 해당하는 내용을 계속 읽는 iterator입니다. istreambuf_iterator<T>()는 placeholder로, iterator의 끝 지점을 의미합니다. 따라서 위와 같이 하면 string 임시 객체에는 inputFile로부터 char를 하나 하나씩 읽어 온 내용이 들어 가겠죠.


아 그렇군요.
답변 감사합니다.

하지만 역설적으로 저 소스는 보통의 프로그래머한테는 좋은 소스 같지 않군요.

왠만큼 속도와 메모리를 생각해야하는 embed나 그런쪽이 아니라면 CFile을 쓰는게 제일 좋죠. ^^;

요즘도 휴대폰쪽에선 64kb확보에 목숨걸고 팀끼리 싸우는지 모르겠네요.

Fe.head의 이미지

cppig1995 wrote:
#include <fstream> 
#include <iterator> 
#include <string> 

using namespace std; 

string ReadStringFromFile(string inputFile) 
{ 
  ifstream fileStream(inputFile);
  istreambuf_iterator<char> iteratorWithStream(fileStream);
  istreambuf_iterator<char> emptyIterator;
  string s(iteratorWithStream, emptyIterator);
  return s;
}

이제 이해가 갑니다.
답글 감사합니다.^^

#include <fstream> 
#include <iterator> 
#include <string> 

using namespace std; 

string ReadStringFromFile(string inputFile) 
{ 
  ifstream fileStream(inputFile);
  istreambuf_iterator<char> i_beginOfStream(fileStream);
  istreambuf_iterator<char> i_endOfStream;
  string s(i_beginOfStream, i_endOfStream);
  return s;
}

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

prolinko의 이미지

표준 입력에서 단어의 목록을 입력 받아서, 같은 단어끼리 분류해서 중복 단어를 제거한 목록을 표준 출력에 찍어주는 프로그램 입니다.

예를 들어서
banana apple banana orange pineapple apple apple pineapple
이렇게 입력하면
apple banana orange pineapple
이렇게 나와야 합니다. (꼭 정렬될 필요는 없습니다.)

python 으로는

import itertools
print ' '.join(k for k, g in itertools.groupby(sorted(a.split())))
print ' '.join(k+' '+str(len(list(g))) for k, g in tertools.groupby(sorted(a.split())))

C++ 로는

vector<string> words;
copy(istream_iterator<string>(cin), istream_iterator<string>(), back_inserter(words));
sort(words.begin(), words.end());
unique_copy(words.begin(), words.end(), ostream_iterator<string>(cout, " "));
purewell의 이미지

tokigun wrote:
제가 괜히 obfuscation을 좋아 하는 줄 아시나요? =3=333

- 토끼군

본래 성단으로 돌아가시지요. ㅡ_-);

_____________________________
언제나 맑고픈 샘이가...
http://purewell.biz

나는오리의 이미지

purewell wrote:
tokigun wrote:
제가 괜히 obfuscation을 좋아 하는 줄 아시나요? =3=333

- 토끼군

본래 성단으로 돌아가시지요. ㅡ_-);

언제 달에서 이사하셨죠?
ed.netdiver의 이미지

퍼렁별 정복을 위해 강림하신것이 틀림없습니다. :D

--------------------------------------------------------------------------------
\(´∇`)ノ \(´∇`)ノ \(´∇`)ノ \(´∇`)ノ
def ed():neTdiVeR in range(thEeArTh)

차리서의 이미지

“C++ 파일 읽어오기 코드”라고 하시길래 순간적으로 C++ 소스 코드가 들어있는 파일을 읽어오는 (어떤 언어로 작성된) 코드인줄 알았습니다. “파일 읽어오기 C++ 코드”였나보군요.

--
자본주의, 자유민주주의 사회에서는 결국 자유마저 돈으로 사야하나보다.
사줄테니 제발 팔기나 해다오. 아직 내가 "사겠다"고 말하는 동안에 말이다!

gimmesilver의 이미지

prolinko wrote:
표준 입력에서 단어의 목록을 입력 받아서, 같은 단어끼리 분류해서 중복 단어를 제거한 목록을 표준 출력에 찍어주는 프로그램 입니다.

예를 들어서
banana apple banana orange pineapple apple apple pineapple
이렇게 입력하면
apple banana orange pineapple
이렇게 나와야 합니다. (꼭 정렬될 필요는 없습니다.)

python 으로는

import itertools
print ' '.join(k for k, g in itertools.groupby(sorted(a.split())))
print ' '.join(k+' '+str(len(list(g))) for k, g in tertools.groupby(sorted(a.split())))

C++ 로는

vector<string> words;
copy(istream_iterator<string>(cin), istream_iterator<string>(), back_inserter(words));
sort(words.begin(), words.end());
unique_copy(words.begin(), words.end(), ostream_iterator<string>(cout, " "));

이렇게 하면 한 줄이 더 줄어들겠군요...

std::set<std::string> words; 
std::copy(std::istream_iterator<std::string>(std::cin), std::istream_iterator<std::string>(), std::inserter(words, words.end())); 
std::copy(words.begin(), words.end(), std::ostream_iterator<std::string>(std::cout, " ")); 

------------------------
http://agbird.egloos.com

lifthrasiir의 이미지

prolinko wrote:
표준 입력에서 단어의 목록을 입력 받아서, 같은 단어끼리 분류해서 중복 단어를 제거한 목록을 표준 출력에 찍어주는 프로그램 입니다.

예를 들어서
banana apple banana orange pineapple apple apple pineapple
이렇게 입력하면
apple banana orange pineapple
이렇게 나와야 합니다. (꼭 정렬될 필요는 없습니다.)

python 으로는

import itertools
print ' '.join(k for k, g in itertools.groupby(sorted(a.split())))
print ' '.join(k+' '+str(len(list(g))) for k, g in tertools.groupby(sorted(a.split())))

C++ 로는

vector<string> words;
copy(istream_iterator<string>(cin), istream_iterator<string>(), back_inserter(words));
sort(words.begin(), words.end());
unique_copy(words.begin(), words.end(), ostream_iterator<string>(cout, " "));

itertools까지 갈 필요가 없을 텐데요.

import sys
print ' '.join(dict(map(None,sys.stdin.read().split(),[])).keys())

갯수까지 세야 한다면...

import sys
a=sys.stdin.read().split();b=dict(map(None,a,[])).keys()
print' '.join(a);print' '.join(['%s %d'%(i,a.count(i))for i in b])

- 토끼군

cppig1995의 이미지

set<int, less_equal<int> > s;
s.insert(1995);
s.insert(1995);

!(1995<=1995) && !(1995<=1995) == false
따라서 1995는 1995와 동등하지 않습니다.

참고 : Scott D. Meyers, 'Effective STL'(Addison-Wesley, 2001)

STL 대단하군요..

Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.

lifthrasiir의 이미지

cppig1995 wrote:
set<int, less_equal<int> > s;
s.insert(1995);
s.insert(1995);

!(1995<=1995) && !(1995<=1995) == false
따라서 1995는 1995와 동등하지 않습니다.

참고 : Scott D. Meyers, 'Effective STL'(Addison-Wesley, 2001)

STL 대단하군요..

애초에 less_equal<int>를 쓸 수 없지 않나요? 반사율(reflexivity)이 성립하기 때문에 less_equal<int>가 아니라 less<int> 같은 걸 써야 합니다. (a <= a는 참이지만 a < a는 거짓이지요)

- 토끼군

doldori의 이미지

cppig1995 wrote:
set<int, less_equal<int> > s;
s.insert(1995);
s.insert(1995);

!(1995<=1995) && !(1995<=1995) == false
따라서 1995는 1995와 동등하지 않습니다.

참고 : Scott D. Meyers, 'Effective STL'(Addison-Wesley, 2001)

STL 대단하군요..


장난꾸러기시군요. ^^;
Effective STL에서는 이렇게 하지 말라고 했을 텐데요.
lifthrasiir의 이미지

doldori wrote:
cppig1995 wrote:
set<int, less_equal<int> > s;
s.insert(1995);
s.insert(1995);

!(1995<=1995) && !(1995<=1995) == false
따라서 1995는 1995와 동등하지 않습니다.

참고 : Scott D. Meyers, 'Effective STL'(Addison-Wesley, 2001)

STL 대단하군요..


장난꾸러기시군요. ^^;
Effective STL에서는 이렇게 하지 말라고 했을 텐데요.

제가 Effective STL을 보지 않아서 저렇게 하라는 건지 안 하라는 건지 상황을 몰랐습니다. :p 그런 의미에서 누군가 저에게 책 보내 주실수 있는 분... (어이어이)

- 토끼군

cppig1995의 이미지

doldori wrote:
장난꾸러기시군요. ^^;
Effective STL에서는 이렇게 하지 말라고 했을 텐데요.

전 단지 이런 식으로 코드를 짜면 원하는 대로 동작하지 않는다는 걸 말한 것 뿐이라니까요! (믿거나 말거나 학교로 후다닭)

.... 이런 ....

Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.

cppig1995의 이미지

C++ 식

copy(istreambuf_iterator<char>(ifstream("Input.txt")), istreambuf_iterator<char>(),ostreambuf_iterator<char>(ofstream("Output.txt")));

C 식 (이식성 없음)

system("cp Input.txt Output.txt");

C 식 (이식성 있음)

FILE *i = fopen("Input.txt", "rt");
FILE *o = fopen("Output.txt", "wt");
int c;
while((c = fgetc(i)) != EOF) fputc(c, o);

하도 오래되어서 맞는지 모르겠군요.

Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.

cppig1995의 이미지

ESTL 중...

Quote:
"거의 애들 놀이 수준이죠"
"STL을 가지고 놀기 좋아하는 애들을 주변에서 많이 봤을 때 이해되는..."

뒤집어졌습니다 :mrgreen: :|

Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.

jachin의 이미지

cppig1995 wrote:
ESTL 중...

Quote:
"거의 애들 놀이 수준이죠"
"STL을 가지고 놀기 좋아하는 애들을 주변에서 많이 봤을 때 이해되는..."

뒤집어졌습니다 :mrgreen: :|

그러고보니... 정말 cppig1995님께 해당되는 얘기... orz