본문 바로가기
코딩 정보

c++ 입출력 정리와 자주 쓰이는 vector

by 꽁이꽁설꽁돌 2024. 2. 5.
728x90
반응형

목차

     

     

    나는 백준 문제 풀이를 하면서 배열 대신 자주 쓰이는 vector와 c++의 입출력을  깔끔하게 정리하고 싶었다.

     

    아래 내용 정도만 안다면 큰 도움이 될 것이라 생각한다.

     

    입출력 향상 방법

    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
    	ios_base::sync_with_stdio(false); // c와 c++의 표준 입출력 스트림을 동기화를 하지않아 속도 향상
    	cin.tie(nullptr); // cin사용시 출력 버퍼를 비우지(flush) 않는다.
    	cout.tie(nullptr);  // 위와 동일
    	int n;
    	cin >> n;
    	cout << n << "\n";  //endl은 효율을 떨어트린다
    }

     

    vector 사용 예

    #include <iostream>
    #include <vector>
    #include <algorithm>  //정렬 기능 이용을 위한 헤더파일
    // vector 모음집
    using namespace std;
    
    int main() {
    	vector<int> v; // 보통 크기를 정하지 않고 사용함(vector<int> v(10); -> 크기를 정할경우)
    	v.push_back(10); // 맨끝에 삽입
    	v.pop_back(); // 맨끝 삭제
    	v.front();  // 맨 앞 참조
    	v.back(); // 맨 뒤 참조
    
    	for (auto iter : v) {
    		cout << iter << endl;   //iter로 접근하기
    	}
    
    	for (auto iter = v.begin(); iter < v.end(); iter++) {
    		cout << *iter << endl;  //begin과 end를 이용한 접근하기
    	}
    
    	for (int i = 0; i < v.size(); i++) {
    		cout << v[i] << endl;   // 원소로 접근하기
    	}
        
    	sort(v.begin(), v.end()); //오름차순 정렬
    	sort(v.begin(), v.end(), greater<int>()); //내림차순 정렬
        
        auto iter = max_element(v.begin(), v.end());  //최대값 구하기
        
    	auto iter = find(v.begin(), v.end(), 3); //요소의 값이 3인 요소 위치 반복자 반환
    	v.erase(iter); //반복자를 이용한 삭제
        
        v.erase(remove(v.begin(), v.end(), 지우고 싶은 원소), v.end());
        //remove는 특정 값을 찾아서 완전히 지우는 것이 아닌, 
        //벡터의 뒤로 보내기 때문에 추가로 erase를 해줘야 한다.
    
    
    }

     

    vector pair class

    #include <iostream>
    #include <vector>
    
    // vector pair
    using namespace std;
    
    
    bool comparePairs(const pair<int, int> &a, const pair<int, int> &b) {
        return a.first < b.first;  //첫번째 값을 기준으로 정렬하는 함수 ture false를 반환해야함
    }
    
    int main() {
    	vector<pair<int, int>> v(1000000, make_pair(0, 0)); //초기화방법
    
    	v.push_back(make_pair(10, 20));  // 값 추가 v.push_back({ 10, 20 }); 이런식으로도 가능
    
    	for (int i = 0; i < v.size(); i++)
    		cout << v[i].first << " " << v[i].second << endl;  // first-> 첫번째 원소 second -> 두번째 원소
    
        sort(vec.begin(), vec.end(), comparePairs); //위의 함수를 이용해 원하는 기준으로 정렬 가능
    
    
    	vector<vector<int>> v2(3, vector<int>(3, 0)); // 3X3의 이차원 벡터
        v2[0][0] = 1;  //값 추가
    
    
    }

     

    입력 시 문자열 분리후 저장 방법

    #include <iostream>
    #include <vector>
    #include <sstream>  // istringstream을 쓰기위해서 이 헤더파일 사용
    using namespace std;
    
    int main(void)
    {
    	ios_base::sync_with_stdio(false); 
    	cin.tie(nullptr); 
    	cout.tie(nullptr);
        
    	vector<string>list;
    	int i;
    	string str;
        
    	getline(cin, str);  //공백포함하여서 입력 받기
    	istringstream ss1(str);  //넣어주어야함
    	string buffer;   
    
    	while (getline(ss1, buffer, ' ')) {  // 뛰어쓰기 단위로 끊어줌 
    		list.push_back(buffer);
    	}
    	for (i = 0; i < list.size(); i++) {
    		cout << list[i];
    	}
    
    	
    }

     

    입력 시 문자 숫자 구분한 저장 방법

    #include <iostream>
    #include <sstream>
    #include <vector>
    using namespace std;
    
    int main() {
        ios_base::sync_with_stdio(false);
        cin.tie(nullptr);
        cout.tie(nullptr);
    
        vector<int> list;
        string str;
        getline(cin, str);
    
        istringstream ss1(str);
        int num;
        string ar;
    
        ss1 >> ar >> num;  //이런식으로 가능
        list.push_back(num);
        cout << ar << list.front();
     
    }
    //abc 123 입력 받으면 문자 숫자 분리해서 얻을 수 있음

     

    문자열 다루기 편한 파이썬하세요 허허

     

    반응형