개발 소발/개발 C++(기초)
c++ std::array,std::vector
우기!
2019. 7. 30. 14:44
정적배열에선 std::array를 사용가능하다.
기존 정적배열은 함수 파라미터로 배열을 보내면 사이즈를 측정할 수 없었다.
array를 사용하면 정적배열을 간단히 사용할 수 있다.
.size()를 사용하면 사이즈가 출력된다.
파라미터로 복사되어도 그대로 출력된다.
파라미터는 복사되기때문에 array가 크기가 크면 reference &를 사용하는게 좋다.
.at()을 사용하면 사이즈오버를 미리 체크해준다.
#include <iostream>
#include <array>
#include <algorithm>
using namespace std;
void arrCheck(const array<int, 5> arr) {
cout << &arr << endl;
for (int i = 0; i < arr.size(); i++) {
cout << arr[i] << endl;
cout << arr.at(i) << endl;
}
}
void arrRefCheck(const array<int,5> &arr) {
cout << &arr << endl;
for (int i = 0; i < arr.size(); i++) {
cout << arr[i] << endl;
cout << arr.at(i) << endl;
}
}
int main()
{
//int array2[5] = {};
array<int, 5> arr = {1,10,3,7,5};
cout << "arrSize() : " << arr.size() << endl;
cout <<"main() : "<< &arr << endl;
arrCheck(arr);
arrRefCheck(arr);
//sort
std::sort(arr.begin(), arr.end());
arrCheck(arr);
arrRefCheck(arr);
//sort 역순
std::sort(arr.rbegin(), arr.rend());
arrCheck(arr);
arrRefCheck(arr);
return 0;
}
std::vector는 동적 array를 대체해서 손쉽게 사용가능하다.
std::vector는 동적할당이 되기때문에 처음부터 사이즈를 정해주지 않아도 된다.
std::array와 같이 .size(),.at()이 사용가능 하다.
동적할당이므로 .resize()로 크기를 변경할 수 있다.
동적할당은 delete를 해야하는데 vector은 자동으로 사라진다.
#include <iostream>
#include <vector>
using namespace std;
int main()
{
std::vector<int> array;
std::vector<int> array2 = { 1,2,3,4,5 };
cout << array2.size() << endl;
vector<int> arr = { 1,2,3,4 };
for (auto &a : arr) {
cout << a << endl;
}
return 0;
}