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 입력 받으면 문자 숫자 분리해서 얻을 수 있음
문자열 다루기 편한 파이썬하세요 허허
반응형
'코딩 정보' 카테고리의 다른 글
VsCode로 c++실행 시 터미널에 출력값이 안나올 경우 (0) | 2024.03.20 |
---|---|
[yarn 실행 에러] yarn : 이 시스템에서 스크립트를 실행할 수 없으므로 C:\Users\user\AppData\Roaming\npm\yarn.ps1 파일을 로드할 수 없습니다. (0) | 2024.03.15 |
git 간단 사용법 commit, merge 등등 (1) | 2024.03.10 |
타입스크립트 실행 (0) | 2024.03.07 |
LNK1104 파일을 열 수 없습니다 오류해결법 (0) | 2024.02.05 |