[C/C++]자주쓸 문법정리

이성훈·2022년 2월 4일
0

C/C++

목록 보기
4/4
  1. printf 로 string출력불가능함. string의 c_str() 함수로 char배열로 바꾸어 출력함

  2. string에 char 하나씩 붙이려면 += 연산자 또는 push_back 함수사용

  3. char배열에 어떤 입력값을 받게되면 입력되고 남은 모든 인덱스는 '\0' 문자로 입력받음

  4. c 에서 bool값을 출력하는 서식문자는 없다. %d 를 이용하여 0 과 1 로밖에 출력불가

  5. bool b[4] = {true}; // bool배열의 모든원소 초기화방법

  6. scanf("%[^\n]s", ~~) // scanf는 정규표현식에따른 입력을 받을수있음. 개행문자\n으로 끝나는 즉
    한줄전부를 입력받는 코드

  7. while(scanf() != EOF) // EOF(정수 -1)는 문자열을 끝날때까지 입력받는 방법.(에러가 나거나)

  8. scanf("%d", )로 정수를 읽고, 다음으로 scanf("%c")로 문자를 읽을때 개행문자(\n) 도 읽어짐을 유의. 개행문자를 제거하려면 처음부터 scanf("%d\n") 으로 정수를 읽자

  9. 심화 for문..
list<person> pl;
for(list<Person>::iterator iter = pl.begin(); iter != pl.end(); iter++){ //이터레이터 사용
       printf("%s %d\n",(*iter).getName().c_str(),(*iter).getAge()); }	
for(auto p:pl) { //for-each 사용
        printf("%s %d\n",p.getName().c_str(),p.getAge()); }

위 두가지는 같은동작을함.

10. using std::pair;, using std::cout 등으로 using키워드는 함수하나씩 지정가능함
(using 과 typedef 차이 https://velog.io/@dal-pi/c-typedef-%EC%99%80-using%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90)

11. %d 다음 %c 하면 줄바꿈문자가 있으면 읽어냄

12. %c 다음 %c 이것또한 줄바꿈문자가 있으면 읽어냄

13. struct를 자주쓰자.
세 변수가 한묶음으로 쓰일경우 tuple이나 pair등 쓰지말고 struct선언하자.
또, struct 된 자료를 생성및 초기화할대는 {값, 값, 값, ...}으로 간단하게 나타낼 수 있다.
예제:
struct INFO{int x, y, z, t};
vector< INFO> list;
list.push_back({1, 2, 3, 4});

14. map객체에 사용자정의 타입을 키로 사용하는법은
내부에 < 연산자를 재정의해주면된다.

15. 반복자만드는법
STL<>::iterator
예) map<int, int>::iterator it; 맵 반복자 객체 it 생성
vector< int>::iterator it; 벡터 반복자 객체 생성
이걸 이용해서 아래의 for문을 사용가능하다.
vector<> v;
for(vector<>::iterator it=v.begin(); it!=v.end(); it++) { code... }
중요한점은 반복자 객체에게 실제 객체의 .begin() 을 넣어주고,
이 반복자를 증감연산하여 내부 객체를 하나씩 접근가능한것이다

15-1.
for(auto it=v.begin(); it!=v.end(); it++) 편하게 auto타입을 사용해도 정상작동함

16. 여러 STL컨테이너에 사용자정의 구조체,객체 사용시주의점
map : <연산자재정의 필요 => 하지않으면 요소가 제대로 삽입되지않음(insert나 []연산자 제대로 작동X)
hash_map : ==연산자와 hash함수 재정의필요
이외 등등..

17. DFS, BFS에서 계산하는가짓수를 확실히 줄일 수 있는것은 BFS.
왜냐면 DFS는 이전depth를 모두 비교하며 계속depth를 증가시켜나가므로 제거해야할, 불필요한 연산도 계속 이루어짐
그래서 같은 depth에서 불가능한 경우를 줄이며 계산해나가는 BFS가 더 효율적.
시간초과날때는 BFS를 사용해보자

profile
I will be a socially developer

0개의 댓글