2018년 11월 15일 목요일

std::set 간단 사용 예제


#include <iostream>
#include <set>
#include <functional>

void Result(std::pair<std::set<int>::iterator, bool> * p) {
    if (true == p->second)
        cout << *p->first << " Insert success!" << endl;
    else
        cout << *p->first << " is Exist. Insert Fail! " << endl;
}

int main(){

    std::set<int> s;

    std::pair<std::set<int>::iterator, bool> ins1, ins2;
    ins1 = s.insert(50);
    s.insert(40);
    s.insert(80);
    ins2 = s.insert(40);

    Result(&ins1);
    Result(&ins2);

    std::set<int>::iterator iter;
    for (iter = s.begin(); iter != s.end(); ++iter){
        cout << *iter << " ";
    }

}

output
50 Insert success!
40 is Exist. Insert Fail! 
40 50 80 

std::set 은 유일한 값(키)이 들어 가며 자동정렬이 된다. std::map  은 key 와 value 이지만 std::set 는 key 만 존재한다. 이걸 사용하는 곳은 흔치 않지만 알아두면 간혹 적절하게 사용할 시점이 발견된다.

2018년 11월 1일 목요일

[c++] array reverse

#include <stdio.h>
#include <stdlib.h>
#include <cstdlib>
#include <ctime>

#define NUMBER_COUNT 5

int main()
{
	int a[NUMBER_COUNT], i, temp, half_cnt = NUMBER_COUNT / 2;

    srand((unsigned int)time(NULL));

	for(i=0;i<NUMBER_COUNT;i++){
		a[i] = rand() % 100 + 1;
		printf("%d ",a[i]);
	}
	printf("\n");

	for(i=0; i<half_cnt ;i++){
		temp = a[i];
		a[i] = a[NUMBER_COUNT-i-1];
		a[NUMBER_COUNT-i-1] = temp;
		a[NUMBER_COUNT-i-1] = temp;
	}

	for(i=0;i<NUMBER_COUNT;i++){
		printf("%d ",a[i]);
	}
	
	printf("\n");
	system("pause");

	return 0;

}

위 소스를 보면 NUMBER_COUNT 로 개수를 미리 셋팅합니다. 그리고 돌려 보면 미리 랜덤하게 생성된 값을 보여주고 그리고 바로 밑에 서로 자리를 바꾼 값을 보여줍니다.

바꾸는 방법은 양끝에 있는 것을 서로 자리를 바꾸는 방식으로 하였습니다. 그래서 반복문은 전체 수에서 절반(버림) 만큼 반복합니다.