티스토리 뷰

728x90
반응형
틀린 내용이 있다면 댓글로 알려주세요! 감사합니다 :)
2021.03.29 벡터 클래스 함수들의 포스트 url 추가! & 벡터 쓰는 이유 1번 설명 추가

 

막상 알고리즘 공부를 하면서 배열이 아닌 vector를 쓰는 경우가 있는데 정작 배열과의 차이점을 정확히 알지 못해서 vector에 대해서 공부해봤다. 예전부터 당연하게 쓰긴 했지만 정작 쓰는 이유에 대해서는 제대로 공부를 하지 못했다. 항상 정확하게 알지 못하는 것이 나의 최대 단점이 아닐까 싶다..

그래서 이번에는 벡터가 어떤 장단점이 있는지 확실히 알아보고 넘어가려 한다.

일단 배열이란 간단하게 생각하면 우리가 어떤 사람들의 나잇값을 저장하는 변수를 만든다 하자.

#include <stdio.h>
int main()
{
    int person1;
    int person2;
    int person3;

      return (0);
}

그러면 위와 같이 3개의 변수를 만들 수 있다. 하지만 문제는 여기서부터다 만약 100명 혹은 1000명의 변수를 만들어야 한다면...? 일일이 손 코딩을 하려면 정말 끔찍한 일이다. 그래서 우리는 배열을 활용해서 더욱 효율적으로 변수들을 만들 수 있다.

 

#include <stdio.h>
int main()
{
    int person[1000];

    return (0);
}

이렇게 활용하면 우리는 편리하게 1000명의 사람의 나이를 저장할 변수 공간을 만들 수 있다.

그렇다면 벡터와의 차이점을 무엇일까?

가장 큰 차이점은 배열의 크기를 우리가 지정하면 바꿀 수 없다는 것이다. 하지만 벡터에서는 내가 1000명의 공간을 만들었어도 추가하거나 줄일 수가 있다. 벡터가 동적 배열 클래스로 구현되어 있기 때문이다.



💡 벡터를 써야 할 때

1. 배열과는 굉장히 유사하지만 내가 저장하려는 데이터의 개수가 가변적일 때 사용하는 것이 좋다!

(gcc에서는 ㅇ틀린 내용이 있다면 댓글로 알려주세요! 감사합니다 :)

2021.03.29 벡터 클래스 함수들의 포스트 url 추가!

 

 

막상 알고리즘 공부를 하면서 배열이 아닌 vector를 쓰는 경우가 있는데 정작 배열과의 차이점을 정확히 알지 못해서 vector에 대해서 공부해봤다. 예전부터 당연하게 쓰긴 했지만 정작 쓰는 이유에 대해서는 제대로 공부를 하지 못했다. 항상 정확하게 알지 못하는 것이 나의 최대 단점이 아닐까 싶다..

 

그래서 이번에는 벡터가 어떤 장단점이 있는지 확실히 알아보고 넘어가려 한다.

 

일단 배열이란 간단하게 생각하면 우리가 어떤 사람들의 나잇값을 저장하는 변수를 만든다 하자.

 

#include <stdio.h>

int main()

{

    int person1;

    int person2;

    int person3;

 

      return (0);

}

그러면 위와 같이 3개의 변수를 만들 수 있다. 하지만 문제는 여기서부터다 만약 100명 혹은 1000명의 변수를 만들어야 한다면...? 일일이 손 코딩을 하려면 정말 끔찍한 일이다. 그래서 우리는 배열을 활용해서 더욱 효율적으로 변수들을 만들 수 있다.

 

 

 

#include <stdio.h>

int main()

{

    int person[1000];

 

    return (0);

}

이렇게 활용하면 우리는 편리하게 1000명의 사람의 나이를 저장할 변수 공간을 만들 수 있다.

 

그렇다면 벡터와의 차이점을 무엇일까?

 

가장 큰 차이점은 배열의 크기를 우리가 지정하면 바꿀 수 없다는 것이다. 하지만 벡터에서는 내가 1000명의 공간을 만들었어도 추가하거나 줄일 수가 있다. 벡터가 동적 배열 클래스로 구현되어 있기 때문이다.

 

 

 

 

💡 벡터를 써야 할 때

1. 배열과는 굉장히 유사하지만 내가 저장하려는 데이터의 개수가 가변적일 때 사용하는 것이 좋다!

(컴파일러의 차이가 있기 때문. gcc에서는 가변적이어도 배열에 선언이 가능하지만, 그 외 컴파일러에서는 문제가 생길 수도 있다! 아래 포스트를 읽어보면 이해가 갈 것이다.)

 

[c언어] 동적할당이 필요한 이유

알고리즘 공부를 하면서 막상 동적할당을 사용하려는 경우에 왜 정적으로 할당하지 않고 동적으로 할당하는지에 대한 의문이 생겼다. 내가 동적할당을 사용하는 이유는 '메모리를 효율적으로

minsoftk.tistory.com

 

2. 중간에 데이터를 삽입하거나 삭제할 일이 없고 마지막에서 추가나 삭제 정도만 있을 때, 이는 배열이나 벡터나 모두 비효율적이다.

3. 랜덤 하게 데이터 접근을 허용하게 하고 싶을 때!

 

환경

  • <vector>를 사용한다.

 

vector 기본 선언문

vector<자료형>[변수이름];

#include <stdio.h>
#include <vector>
int main()
{
    vector<char> ex1;
    vector<int> ex2;
    vector<string> ex3;

    return (0);
}



vector 생성자를 이용한 디폴트 선언

vector<자료형>변수이름;

#include <stdio.h>
#include <vector>
int main()
{
    vector<char> ex1(3); //3의 값으로 채워진 vector가 생성
    vector<int> ex2(10); //10의 값으로 채워진 vector가 생성

    int n = 10;
    vector<int> ex3(n); //n의 값으로 채워진 vector가 생성

    return (0);
}



vector 생성자를 이용한 선언 및 초기화

vector<자료형>[변수이름](개수, 값);

#include <stdio.h>
#include <vector>
int main()
{
    vector<char> ex1(3, 2); //2의 값으로 채워진 3개의 vector가 생성

    int n = 10;
    vector<int> ex3(n, 1); //1의 값으로 채워진 n개의 vector가 생성
    return (0);
}



vector 생성자를 이용한 선언 및 초기화

vector<자료형>[변수이름]( .. 채울 값 .. );

#include <stdio.h>
#include <vector>
int main()
{
    vector<char> ex1(`a`, `b`, `c`, `d`); //a b c d의 값을 가진 벡터 생성
    return (0);
}



push_back을 이용한 값 채우기

벡터의 맨 뒤에 값을 밀어 넣어주는 함수

#include <stdio.h>
#include <vector>
int main()
{
    vector<char> ex1(`a`, `b`, `c`, `d`); //a b c d의 값을 가진 벡터 생성
    //ex1과 똑같은 ex2 벡터를 만들어보자.
    vector<char> ex2;
    ex2.push_back("a");
    ex2.push_back("b");
    ex2.push_back("c");
    ex2.push_back("d");

    return (0);
}



push_back을 이용한 값 채우기

vector<자료형>[변수이름]( .. 채울 값 .. );

#include <stdio.h>
#include <vector>
int main()
{
    vector<char> ex1(`a`, `b`, `c`, `d`); //a b c d의 값을 가진 벡터 생성
    //ex1과 똑같은 ex2 벡터를 만들어보자.
    vector<char> ex2;
    ex2.push_back("a");
    ex2.push_back("b");
    ex2.push_back("c");
    ex2.push_back("d");

    return (0);
}



백터 복사하는 법

vector<자료형>[변수이름]( .. 채울 값 .. );

#include <stdio.h>
#include <vector>
int main()
{
    vector<char> ex1(`a`, `b`, `c`, `d`); //a b c d의 값을 가진 벡터 생성
    //ex1과 똑같은 ex2 벡터를 만들어보자.
    vector<char> ex2(ex1);
    vector<char> ex2 = ex1; //대입 연산자도 가능하다

    return (0);
}

이외에 연산자 대소 비교도 있지만 배열과 거의 비슷하다고 생각하면 된다.
index를 지정하지 않으면 벡터의 첫 번째 값을 비교한다.



벡터 클래스의 함수들에 대한 자세한 설명이 있다.

 

[C++] 라이브러리, 벡터 클래스, 동적 할당

만약에 입력으로 n을 입력받아 크기가 n인 배열을 만들고 싶다면 어떻게 해야 할까? int n; cin >> n; int arr[n]; 이렇게 하면 될까? 이렇게 선언하면 컴파일 에러가 나는 것을 볼 수 있다. 배열의 크기

breakcoding.tistory.com

 

 

📕 reference :

https://jhnyang.tistory.com/230

https://jhnyang.tistory.com/173

728x90
반응형
댓글