// 크기가 0인 벡터 선언
std::vector<int> vec;
// 지정한 초깃값으로 이루어진 크기가 5인 벡터 선언
std::vecotr<int> vec = {1, 2, 3, 4, 5};
// 크기가 10인 벡터 선언
std::vector<int> vec(10);
// 크기가 10이고, 모든 원소가 5로 초기화된 벡터 선언
std::vector<int> vec(10, 5);
push_back(val):
if size < capacity // 새 원소를 추가할 공간이 있는 경우
- 마지막 원소 다음에 val 저장
- 벡터 크기를 1만큼 증가
- return;
if vector is already full // 할당된 메모리 공간이 가득 차 있는 경우
- 2*size 크기의 메모리를 새로 할당
- 새로 할당한 메모리로 기존 원소 전부를 복사/이동
- 데이터 포인터를 새로 할당한 메모리 주소로 지정
- 마지막 원소 다음에 val을 저장하고, 벡터 크기를 1만큼 증가
std::vector<int> vec; // 비어 있는 벡터 생성: {}
vec.push_back(1); // 맨 뒤에 1 추가: {1}
vec.push_back(2); // 맨 뒤에 2 추가: {1, 2}
vec.insert(vec.begin(), 0); // 맨 앞에 0 추가: {0, 1, 2}
vec.insert(find(vec.begin(), vec.end(), 1), 4); // 1 앞에 4 추가: {0, 4, 1, 2}
push_back()과 insert()의 단점: 추가할 원소를 임시로 생성한 후 벡터 버퍼 내부 위치로 복사 또는 이동 수행
emplace_back() / emplace(): 새로운 원소가 추가될 위치에서 원소를 생성 -> 성능 향상
벡터 원소 제거: pop_back() 또는 erase()
벡터 원소 제거 예제 코드
#include <iostream>
#include <vector>
using namespace std;
void print(vector<int> vec)
{
for (auto& i : vec)
{
cout << i;
}
cout << endl;
}
int main()
{
vector<int> vec = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
print(vec);
// 맨 마지막 원소 하나 제거: {0, 1, 2, 3, 4, 5, 6, 7, 8}
vec.pop_back();
print(vec);
// 맨 처음 원소 제거: {1, 2, 3, 4, 5, 6, 7, 8}
vec.erase(vec.begin());
print(vec);
// 2번째 원소부터 5번째 앞 원소까지(4번째 원소까지) 제거: {1, 5, 6, 7, 8}
vec.erase(vec.begin() + 1, vec.begin() + 4);
print(vec);
}
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
vector<vector<int>> matrix;
while(true)
{
int line_1, line_2, line_3;
cin >> line_1 >> line_2 >> line_3;
if (line_1 == 0) break;
else
{
vector<int> vec = {line_1, line_2, line_3};
matrix.push_back(vec);
}
}
for (auto &vec : matrix)
{
sort(vec.begin(), vec.end());
int longest_square = vec[2] * vec[2];
int short1_square = vec[0] * vec[0];
int short2_square = vec[1] * vec[1];
if (longest_square == short1_square + short2_square)
{
cout << "right" << endl;
}
else
{
cout << "wrong" << endl;
}
}
return 0;
}