vector::empty()
벡터가 비어있는지 확인하는 함수이다.
Input : myvector = 1, 2, 3, 4, 5
myvector.empty();
Output : False
Input : myvector = {}
myvector.empty();
Output : True
시간 복잡도 : O(1)
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> myvector{};
if (myvector.empty())
{
cout << "True";
}
else {
cout << "False";
}
return 0;
}
True
다음은 전체 배열의 합계를 구하는 프로그램이다.
Input : 1, 5, 6, 3, 9, 2
Output : 26
Explanation - 1+5+6+3+9+2 = 26
// CPP program to illustrate
// Application of empty() function
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int sum = 0;
vector<int> myvector{ 1, 5, 6, 3, 9, 2 };
while (!myvector.empty())
{
sum = sum + myvector.back();
myvector.pop_back();
}
cout << sum;
return 0;
}
vector::size()
배열의 크기를 반환하는 함수이다.
Input : myvector = 1, 2, 3, 4, 5
myvector.size();
Output : 5
Input : myvector = {}
myvector.size();
Output : 0
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> myvector{ 1, 2, 3, 4, 5 };
cout << myvector.size();
return 0;
}
왜 size()보단 empty()가 선호 될까?
- 조건 연산자를 안쓰기 때문에 직관적이다.
- O(1)의 복잡도를 유지한다, list 같은 경우에는 O(n)
Input : 1, 5, 6, 3, 9, 2
Output : 26
Explanation - 1+5+6+3+9+2 = 26
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int sum = 0;
vector<int> myvector{ 1, 5, 6, 3, 9, 2 };
while (myvector.size() > 0) {
sum = sum + myvector.back();
myvector.pop_back();
}
cout << sum;
return 0;
}
clear() 함수를 호출 후 size() 함수를 호출할 시 쓰레기 값이 나온다. 아래는 정상 출력
#include <bits/stdc++.h>
using namespace std;
int main()
{
// Initializing a vector of string type
vector<string> vec = { "Geeks", "For", "Geeks" };
for (int i = 0 ; i <= vec.size() - 1 ; i++)
cout << vec[i] << ' ';
return 0;
}
Geeks For Geeks
#include <bits/stdc++.h>
using namespace std;
int main()
{
// Initializing a vector of string type
vector<string> vec = { "Geeks", "For", "Geeks" };
vec.clear();
for (int i = 0; i <= vec.size() - 1; i++)
cout << vec[i] << ' ';
cout << "Geeks For Geeks";
return 0;
}
Segmentation Fault SIGEGV
따라서 clear후 for문에서 조건으로는 int형으로 캐스팅 해줘야한다.
#include <bits/stdc++.h>
using namespace std;
int main()
{
// Initializing a vector of string type
vector<string> vec = { "Geeks", "For", "Geeks" };
// Clearing the vector
// Now size is equal to 0
vec.clear();
// Typecasting vec.size() to int
for (int i = 0; i < (int)vec.size() - 1; i++)
cout << vec[i] << ' ';
cout << "Geeks For Geeks";
return 0;
}
출처 : https://www.geeksforgeeks.org/vectorempty-vectorsize-c-stl/
'CS > 자료구조 & 알고리즘' 카테고리의 다른 글
최소 스패닝 트리 (MST) / 크루스칼 알고리즘 (Kruskal Algorithm) (0) | 2022.08.14 |
---|---|
가중치 그래프와 임계 경로(Critical Path) (0) | 2022.08.14 |
C++ vector사용법 및 설명 (장&단점) (0) | 2022.08.03 |
C 정렬 코드 (0) | 2022.07.20 |
컨테이너 어댑터 (스택, 큐, 우선순위 큐) (0) | 2022.07.04 |