토비의 스프링 3.1 책을 읽으며 일부분을 정리한 내용입니다. 
개념 이해를 위한 내용들 중 일부분을 정리했으므로 이해를 돕기위한 예시 코드들 및 자세한 전체적인 내용은 책을 통해 확인하시길 바랍니다.
포스팅 내용이 저작권의 문제가 발생할 경우 게시물은 바로 삭제/비공개 처리됩니다.

추상화

어떤 것들의 공통적인 성격을 뽑아내어 이를 따로 분리해내는 작업

 

인터페이스

자바가 추상화를 위해 제공하는 유용한 도구

어떤일을 하겠다는 기능만 정의해 놓을 것

자신이 사용할 클래스가 어떤 것인지 몰라도 단지 인터페이스를 통해 원하는 기능을 사용하기만 하면 된다.

 

인터페이스 예시 구조 책 p.75 그림

개방 폐쇄 원칙

객체지향 설계 원칙 중 하나

클래스나 모듈은 확장에는 열려있어야 하고 변경에는 닫혀있어야 한다.

 

객체지향 설계 원칙(SOLID)

객체지향의 특징을 잘 살릴 수 있는 설계의 특징

디자인 패턴이 구체적인 솔루션이라면 객체지향 설계 원칙은 general한 설계 기준

 

5가지 객체지향 설계 원칙

1. SPR(The Single Responsibility Principle): 단일 책임 원칙

 하나의 메서드에는 하나의 기능

2. OCP(The Open Closed Principle): 개방 폐쇄 원칙

 확장에는 열려있지만 변경에는 닫혀있다

3. LSP(The Liskov Subsitution Principle): 리스코프 치환 원칙

다형성

4. ISP(The Interface Segregation Principle): 인터페이스 분리 원칙

 사용자마다 창 분리하여 구현

5. DIP(The Dependency Inversion Principle): 의존관계 역전 원칙

 사용할 객체 불러쓰기

높은 응집도

하나의 모듈, 클래스가 하나의 관심사에만 집중

변경이 필요할 때 해당 모듈, 클래스가 전체적으로 변함

 

낮은 결합도

결합도: 하나의 오브젝트가 변경이 일어날 때에 관계를 맺고 있는 다른 오브젝트에 변화를 요구하는 정도

책임과 관심사가 다른 오브젝트, 모듈은 느슨하게 연결된 상태를 유지

변화에 대응하는 속도가 높아지고 구성이 깔끔해진다.

전략 패턴

자신의 기능 맥락(컨텍스트)에서 필요에 따라 변경이 필요한 알고리즘을 인터페이스를 통해 통째로 외부로 분리시키고 이를 구현한 구체적인 알고리즘 클래스를 필요에 따라 바꿔 사용할 수 있도록 해주는 디자인 패턴

ex) 책의 개선한 UserDaoTest-UserDao-ConnectionMaker 구조

 

개방 폐쇄 원칙에 잘 들어맞는 패턴

 

+읽고 느낀 점

더보기

인터페이스라는 개념이 처음 나왔는데 객체지향 설계 원칙에 상당히 부합하는 유용한 도구인 것 같다.

1장에서 전체적으로 객체지향 원칙에 관한 내용들이 많이 나왔는데 스프링이 자바의 퇴색된 객체지향 원칙을 보완하기 위해 나온 프레임워크인만큼 스프링을 잘 이해하기위해선 객체지향 원칙을 잘 이해하고 있는 것이 중요할 것 같다는 생각이 들었다.

참여하고 있는 스프링 스터디에서 책에는 전략 패턴이 간단하게 나왔지만 현업에서 중요한 개념인 것 같다고 말을 해주셔서 전략 패턴에 대해 좀 더 공부해보면 좋을 것 같다. 

토비의 스프링 3.1 책을 읽으며 일부분을 정리한 내용입니다. 
개념 이해를 위한 내용들 중 일부분을 정리했으므로 이해를 돕기위한 예시 코드들 및 자세한 전체적인 내용은 책을 통해 확인하시길 바랍니다.
포스팅 내용이 저작권의 문제가 발생할 경우 게시물은 바로 삭제/비공개 처리됩니다.

객체 지향의 세계에선 모든 것이 변한다.

 

오브젝트에 대한 설계와 이를 구현한 코드도 영원한 것이 아니라 변화가 필요한데

객체를 설계할 때 가장 주의를 기울여야 하는 부분이 바로 이 변화에 어떻게 대비할지이다.

가장 좋은 방안은 변화를 코드에 적용할 때 변화의 폭을 최소화하는 것이다.

->분리와 확장을 통해

 

분리의 두 가지 법칙

1. 관심사의 분리

관심이 같은 것들을 하나의 객체 안으로

관심이 다른 것은 서로에게 영향을 주지않도록 분리

2. 중복 코드의 메소드 추출

DAO의 관심사항

1. DB 커넥션을 어떻게 가져올 것인가

어떤 DB를 쓰고 어떤 드라이버를 사용할지 등등

2. SQL문을 담을 Statement를 만들고 실행

파라미터로 넘어온 정보를 statement에 바인딩시키고 거기에 담긴 SQL을 DB를 활용해 실행

3. 리소스의 반환

statement, connection 오브젝트 반환

 

변경사항 검증하는 두 가지 방안

1. 리팩토링

리팩토링: 기능은 유지하면서 구조를 바꿔나가며 목적에 맞게 코드를 개선해나가는 과정

->관심사의 분리와 확장이 키워드

->변화에 효율적으로 대응할 수 있고 생산성이 올라간다.

2. 테스트

 

상속을 통한 확장

추상 메소드를 활용해 상속을 통해 서브클래스로 분리

public abstract class UserDao { 
    public void add(User user) { // throws 코드 생략
        // ...
    }

    public User get(String id) {
        // ..
    }
    
    public abstract Connection getConnection(){ // 이 메소드를 상속해야 함
        // ..
        //추상 클래스
    }
}

public class NUserDao extends UserDao {
    public Connection getConnection(){
        //메소드의 구현은 서브클래스가 담당
    }
}

상속의 단점

1. 다중 상속 허용 X

2. 상속을 통한 상하위 클래스의 관계가 생각보다 밀접

서브클래스는 슈퍼클래스의 기능을 직접 사용 가능함

슈퍼클래스 내부의 변화가 생길경우 서브클래스도 수정해야할수도

3. 다른 DAO 클래스에 사용 불가능

디자인 패턴

개발 시 자주 직면하는 문제들을 해결하기 위해 사용하는 재사용 가능한 솔루션

주로 객제지향 설계에 관한 것

패턴을 적용할 상황, 해결해야 할 문제, 솔루션의 구조와 각 요소의 역할과 함께 핵심 의도가 무엇인지 공부

 

템플릿 메소드 패턴

변하지 않는 기능은 슈퍼클래스에, 확장이 필요한 기능은 서브클래스에

훅메소드: 서브클래스에서 선택적으로 오버라이드 할 수 있도록 슈퍼클래스에 정의해둔 메소드

추상메소드를 구현하거나(위의 예시), 훅 메소드를 오버라이드하는 방법 이용 

 

팩토리 메소드 패턴

상속을 통해 기능을 확장하게 하는 패턴

슈퍼클래스 코드에서 서브클래스에서 구현한 메소드를 호출해서 필요한 타입의 오브젝트로 가져와 사용

주로 인터페이스 타입으로 오브젝트를 리턴

 

+읽고 느낀 점

더보기
모든 코드는 변한다라는 말이 엄청 와닿았다. 

앞으로 개발을 함에 있어 코드는 항상 변화할 수 있다는 점을 염두해두고 관심사를 분리하여 변화에 효율적으로 대응할 수 있는 코드를 만드는 습관을 만들어야겠다는 생각을 했다.

 

개발을 할 때 리팩토링과 테스트가 중요하다는 말을 종종 들어왔었는데 왜 중요한지에 대해 생각해볼 수 있는 기회였던 것 같다. 여태까지 프로젝트를 할 땐 리팩토링과 테스트보단 당장의 기능 구현에 초점을 맞춰서 개발을 해왔던 것 같은데 지금 진행하고 있는 프로젝트부턴 리팩토링과 테스트에 힘을 실어 개발을 해야할 것 같다.

 

책에서 디자인패턴과 관련된 내용이 간략하게 나왔는데 처음 접하는 용어라 이에 대해 좀 더 공부해보면 좋을 것 같다.

 

토비의 스프링 3.1 책을 읽으며 일부분을 정리한 내용입니다. 
개념 이해를 위한 내용들 중 일부분을 정리했으므로 이해를 돕기위한 예시 코드들 및 자세한 전체적인 내용은 책을 통해 확인하시길 바랍니다.
포스팅 내용이 저작권의 문제가 발생할 경우 게시물은 바로 삭제/비공개 처리됩니다.

DAO

Data Access Object

DB를 통해 데이터 조회, 수정 등의 기능을 하는 오브젝트

 

자바빈(빈)

비주얼 툴 컴포넌트로서의 자바빈 인기는 줄어들었지만 몇가지 특징들이 오브젝트 오픈소스 기술을 통해 이어져 왔다.

이어진 특징들

-디폴트 생성자: 파라미터가 없는 디폴트 생성자

-프로퍼티: 자바빈이 노출하는 이름을 가진 속성, getter와 setter로 조회/수정 가능

 

JDBC 이용하는 일반적인 작업 순서

1. DB 연결을 위한 Connection을 가져온다.

2. SQL을 담은 Statement(또는 PreparedStatement)를 만든다.

3. 만들어진 Statement를 실행한다.

4. 조회의 경우 SQL 쿼리의 실행 결과를 ResultSet으로 받아서 정보를 저장할 오브젝트에 옮겨준다.

5. 작업중에 생성된 Connection, Statement, ResultSet 같은 리소스는 작업을 마친 후 반드시 닫아준다.

6. JDBC API가 만들어내는 예외를 잡아서 직접 처리하거나, 메소드에 throws를 선언해서 예외가 발생하면 메소드 밖으로 던지게 한다.

 

코드의 기능을 테스트하고자 할  때 사용가능한 가장 간단한 방법

오브젝트 스스로 자신을 테스트하도록 만들어주는 것

테스트에 관한 자세한 내용은 2장에 나옵니다.

 

+읽고 느낀 점

더보기

지난 학기에 데이터베이스 수업을 들으면서 jdbc를 사용해봤었는데 관련된 내용이 나와서 재밌게 읽을 수 있었다.

과제를 할 때는 connection을 가져오고 statement에 쿼리를 담는 등의 주요 로직들에만 주로 관심을 가지면서 작업 중에 생성한 리소스들을 반드시 다 닫아줬는지 확인을 제대로 안했던 것 같아서 다음에 jdbc를 사용하게 된다면 이 점도 제대로 유의해서 코드를 작성해보면 좋을 것 같다.

비트란?

컴퓨터에서 사용하는 데이터의 최소 단위

0과 1

 

비트마스크란?

정수의 이진수 표현을 자료 구조로 쓰는 기법

집합을 메모리/시간 효율적으로 표현 가능하게 해줌

ex) 집합의 i번째 요소가 존재한다면 1, 존재안하면 0으로 표시 (비트마스킹)

 

비트 연산자 종류

-and 연산 &

-or 연산 |

-xor 연산 ^

 둘 중 하나만 1일 때 1

-not 연산 ~

-shift 연산 <<, >>

 왼쪽, 오른쪽으로 비트 이동, 빈자리는 0으로

 

비트마스크 연산 활용

-부분집합 i번째에 요소 삽입(i번째 비트 1로)

bit=bit | 1<<i

-부분집합 i번째 요소 삭제(i번째 비트 0으로)

bit=bit & ~(1<<i)

-부분집합 i번째 요소 조회

if ( bit& (1<<i)==1 ) i는 1

else i는 0

-부분집합 i번째 요소 토글(0->1,1->0)

bit=bit ^ ( 1<<i )

 

비트 마스크 사용시 주의할 점

-비교 연산자보다 비트 연산자의 우선 순위가 낮음

-오버플로우 문제

 

비트마스크의 장점

1. 빠른 수행속도

   O(1)

2. 코드가 짧음

   집합 연산들을 비트연산자를 활용해 한 줄로 표현 가능

3. 적은 메모리 사용량

4. 집합을 배열의 인덱스로 활용할 수 있음

 

 

참고사이트

https://rebro.kr/63

https://jooncco.com/algorithms/bitmask/

https://kim6394.tistory.com/246

https://velog.io/@cchloe2311/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%B9%84%ED%8A%B8%EB%A7%88%EC%8A%A4%ED%82%B9Bit-Masking

 

토비의 스프링 3.1 책을 읽으며 일부분을 정리한 내용입니다. 
개념 이해를 위한 내용들 중 일부분을 정리했으므로 이해를 돕기위한 예시 코드들 및 자세한 전체적인 내용은 책을 통해 확인하시길 바랍니다.
포스팅 내용이 저작권의 문제가 발생할 경우 게시물은 바로 삭제/비공개 처리됩니다.

스프링

자바 엔터프라이즈 애플리케이션 개발에 쓰이는 프레임워크

자바가 복잡해지며 퇴색된 객제지향의 가치를 다시 살려주는 개발 도구

->객제치향의 원칙을 살린 오브젝트의 설계, 구현, 작동이 중요한 쟁점

->코드를 한 번짜면 평생 쓰는게 아니라 객체지향을 기반으로 미래의 변화에 대비해야함

두가지 중요한 가치

단순함: 목적을 이루기 위한 단순한 접근 방법

유연성: 다른 프레임워크들과 쉽게 결합되며 확장되는 방법

스프링을 이해한 후 자신의 프레임워크에 맞게 확장해나가는 능력이 중요

스프링을 이해?

스프링의 원리, 추구하는 가치와 목표를 확실히 알고있는 것

->스프링이 어떤 기술들을 제공하고 왜 제공하는지 공부

 

 

 

 

 

 

 

 

1. 코드의 데이터베이스 이름, 계정이름, 비밀번호가 정확한지 확인

2. jar파일이 제대로 들어가있는지 확인

 

jar파일도 넣고 코드에 데이터베이스 정보들도 다 제대로 적었는데 계속 아래와 같은 오류가 떴다.

->이클립스가 예전 버전이고 커넥터 jar파일이 가장 최신 버전이라 버전 호환이 안돼서 오류가 발생했을수도 있다는 생각이 들었다. 이클립스를 가장 최신버전으로 업데이트하고 코드도 여러 번 다시 확인했지만 오류를 해결하지 못했다.

 

->그러다 다운받아 연결한 external jar파일이 source옵션에서 다운받은 ~sources.jar파일로 잘못된 파일이 들어가있음을 발견했다. mariaDB 사이트에서 connector를 universal 옵션으로 ~.jar파일을 다시 다운받은 후 그 파일을 연결하여 오류를 해결할 수 있었다.

 

해당 jar파일의 다운로드 링크는 아래와 같다. 

https://downloads.mariadb.com/Connectors/java/connector-java-2.7.3/

 

Connectors/java/connector-java-2.7.3/ - MariaDB

 

downloads.mariadb.com

 

21/10/30에 진행된 학교 프로그래밍 경진대회에 참가했다.

알고리즘 스터디를 진행한지 대략 두달 정도 지난 시점이라 직접 대회에서 얼마나 늘었는지 체감해보고 

다시 한 번 실력을 점검해보는 좋은 기회가 될 것 같아 스터디원 모두 대회에 참가하여 문제를 풀었다.

 

코로나로 인해 비대면으로 진행됐고 백준 티어 기준 브론즈~플래티넘까지 다양한 난이도의 문제들이 출제됐다.

결과부터 말하자면 입상은 하지 못했지만 전체 학년에서 20등대에 들어 게임키 경품을 받았다!

입상을 하지 못한게 아쉽긴하지만 아직 알고리즘 공부를 시작한지 별로 안됐으니까 4학년 때 다시 입상을 노려보고싶다.

 

이번 대회를 통해 느낀 게 있다면 알고리즘 고수들의 문제푸는 속도가 생각보다 더 빠르다는 것과 문제를 처음부터 잘 읽고 푸는게 시간을 아끼는 길이란 걸 다시 한 번 느낄 수 있었다. 또한, 테스트 케이스가 통과하더라도 계속 틀렸습니다가 뜨면 히든케이스를 찾아서 오류를 예외 처리하는 것도 중요하지만 알고리즘 자체 로직에 문제가 있진 않으지 다시 점검해보는 것도 좋을 것 같다는 생각이 들었다. 

 

나중에 공개된 문제별 난이도 티어를 확인해보니 브론즈~실버 문제는 풀 수 있었고 골드 문제부터는 구현하기가 쉽지 않았다. 알고리즘 스터디를 진행하기전 티어가 실버5였고 2달이 지난 지금 실버2가 됐는데 다음 대회가 열릴 땐 골드 문제까지 잘 풀 수 있는 실력을 만들어 참가하고 싶다. 

 

 

덱(Deque)이란?

벡터의 단점을 보완하기 위해 만들어진 컨테이너

새로운 원소가 삽입될 때마다 메모리 재할당 후 이전의 값들을 복사하는 벡터와 달리

덱은 미리 일정한 크기의 메모리 블록을 할당해 둔 후 값을 저장함.

데이터의 삽입과 삭제의 위치가 정해진 큐와 달리 덱은 앞 뒤로 다 데이터를 삽입/삭제 할 수 있음

 

헤더파일 삽입

#include <deque>

using namespace std;

데이터 생성

deque <type> dq;

deque dq;

deque dq(10);

0으로 초기화된 10개 원소 가진 덱 생성

deque<int> dq = { 1, 2, 3 };

deque dq2(dq1);

dq1의 내용을 복사한 덱 dq2 생성

데이터 삽입/삭제

dq.push_front(3);

첫 번째 원소 앞에 5 삽입

dq.push_back(4);

마지막 원소 뒤에 4 추가

dq.insert(2, 5);

2번째 위치에 5 추가

dq.insert(2, 5, 4);

2번째 위치에 5개의 데이터 값 4 추가

dq.pop_front();

첫 원소 삭제

dq.pop_back();

마지막 원소 삭제

dq.clear();

데이터 다 삭제

iterator

dq.begin()

첫 번째 원소 iterator

dq.end()

마지막 원소의 다음! iterator

데이터 조회

dq.at(idx);

idx번째 데이터 참조

dq[idx];

덱 사이즈

dq.size();

데이터 개수 리턴

dq.resize(10);

덱의 크기를 10으로 변경크기가 더 증가했다면 0으로 채움

dq.resize(10,2);

덱의 크기를 10으로 변경

크기가 더 증가했다면 2로 채움

 

참고사이트

https://blockdmask.tistory.com/73

https://velog.io/@choiiis/C-STL-deque%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%A0%95%EB%A6%AC

'프로그래밍 언어 > c++' 카테고리의 다른 글

C++ sort 함수 compare 커스터마이징  (0) 2022.06.03
[Algorithm] c++ 순열 구하는 함수 next_permutation, prev_permutation  (0) 2022.05.04
[STL] 큐(Queue)  (0) 2021.10.11
[STL] vector 컨테이너  (0) 2021.09.19
STL  (0) 2021.09.19

큐에 대한 자료구조 설명

https://cofls6581.tistory.com/118

 

큐(queue)

큐(queue)? 선입선출 FIFO(first in first out)방식의 자료구조 ex)마트 계산대, 은행 창구: FIFO방식 주로 배열이나 연결리스트로 구현함 주로 순차적인 프로세스를 구현할 때 사용함 자료가 삽입되는 곳

cofls6581.tistory.com

헤더파일 삽입

#include <queue>

데이터 선언

queue<int> q;

데이터 추가/삭제

q.push(2);

q.pop(); front 데이터를 삭제

데이터 조회

q.front(); 최상위 데이터 반환

q.back(); 제일 마지막 데이터 반환

데이터 크기

q.size();

q.empty(); 비어있으면 true 아니면 false

데이터 swap

swap(queue1 , queue2); 두 큐의 내용 swap

 

참고사이트

https://life-with-coding.tistory.com/408

'프로그래밍 언어 > c++' 카테고리의 다른 글

[Algorithm] c++ 순열 구하는 함수 next_permutation, prev_permutation  (0) 2022.05.04
[STL] 덱(Deque)  (0) 2021.10.12
[STL] vector 컨테이너  (0) 2021.09.19
STL  (0) 2021.09.19
C++ break 문과 continue문  (0) 2021.09.12

다이나믹 프로그래밍

하나의 문제는 한 번만 계산하는 알고리즘으로 큰 문제를 작은 문제로 나누어 푸는 알고리즘

 

다이나믹 프로그래밍을 사용하기 위한 조건

-작은 문제로 나눌 수 있을 때

-작은 문제의 답이 그것을 포함하며 더 큰 문제에서도 답이 동일하게 나올 때

 

다이나믹 프로그래밍 원리

메모이제이션을 활용해 작은 문제에서 계산한 결과 값을 배열에 저장해두고

나중에 큰 문제에서 그 값이 다시 필요할 때 동일한 계산을 진행하지 않고 저장된 값을 반환받아서 계산

+메모이제이션

결과를 저장해 함수가 한 번만 실행되는 것을 보장하는 기술

동적계획법을 쓸 때 많이 사용한다.

 

다이나믹 프로그래밍 구현법

1. 탑-다운

재귀함수로 구현할 때 대부분 탑-다운 방식을 사용하며 큰 문제를 풀 때

작은 문제 값이 없다면 그 때 작은 문제의 값을 계산함.

2. 다운-탑

작은 문제부터 먼저 계산하여 큰 문제의 값을 계산함.

 

다이나믹 프로그래밍 점화식 찾는 법

1. 작은 문제들의 값(0,1,2,3,3)들을 직접 계산해보면 점화식이 보임

그 점화식을 활용해 다이나믹 프로그래밍을 구현하면 됨.

2. 이전 단계에서 다음 단계로 가는 가짓수가 정해져있다면 그걸 이용해도 됨

   ex. 도형을 쪼갤 때 특정한 규칙으로만 쪼개져서 n-2단계/n-1단계에서 n이 되는

        가짓수가 정해져있을 경우

 

분할 정복 vs 다이나믹 프로그래밍

분할 정복은 단순히 큰 문제를 작은 문제로 나누어 푸는 것으로 작은 문제의 답이 항상

큰 문제의 답이 되지 않아 작은 문제를 여러 번 반복적으로 계산해야 함.

반면에 다이나믹 프로그래밍은 작은 문제 계산을 중복적으로 하지 않고 작은 문제의 답이

큰 문제에서도 변하지 않음을 이용함

 

 

 

참고 사이트

https://blog.naver.com/ndb796/221233570962

https://galid1.tistory.com/507

break;은 해당 반복분 탈출

return;은 해당 함수 탈출

 

break문 예시

int func(){
	while(1){
	    if(조건)
	    	break;
	     a++;
	}	
	b++;
}

조건 참일시 a++ 실행 x 반복문 탈출 후 b++은 실행

 

return문 예시

int func(){
	while(1){
	    if(조건)
	    	return;
	     a++;
	}	
	b++;
}

a++,b++ 둘 다 실행 x

vector 컨테이너

-가변 길이 배열을 구현한 제네릭 클래스

-스스로 내부 크기를 조정하므로 개발자가 크기에 대해 고민한 필요가 없는 장점

-배열의 원소를 저장, 삭제, 검색하는 멤버 함수들을 제공

-인덱스 0부터 시작

 

vector 사용

#include<vector>

using namespace std;

vector 멤버 함수

▶vector 객체 생성

vector<int> v;

비어있는 벡터 v 생성

vector<int> v(3);

0으로 초기화된 3개 원소 벡터 v 생성

vector<int> v(3,2);

2로 초기화된 3개 원소 벡터 v 생성

vector<int> v2(v1);

v1 벡터 복사해서 v2벡터 생성

▶vector 원소 삽입

v.push_back(2);

벡터 v에 2 삽입

v.insert(3,2);

벡터 v의 위치 3에 2 삽입

v.insert(3,5,3);

3의 위치에 5개의 3 삽입

그다음 값들이 뒤로 밀림

▶vector 원소 삭제

v.clear();

모든 원소 제거, 메모리는 남아있음

v.pop_back();

벡터 v의 마지막 원소 삭제

v.erase(iter);

반복자 iter가 가리키는 원소에 접근해서 벡터 v의 원소 삭제

사이즈는 줄어들고 메모리는 남아있음

▶vector 원소 접근

v[idx];

idx번째 원소 접근

v.at(idx);

idx번째 원소 접근

v.front();

첫 번째 원소 접근

v.back();

마지막 원소 접근

v.begin();

반복자로 접근 시 제일 처음 데이터의 위치 가리킴

v.end();

반복자로 접근 시 제일 마지막 데이터의 위치 가리킴

▶vector 사이즈

v.size();

원소 갯수 리턴

v.capacity();

할당된 공간의 크기 리턴

v.empty();

비어있으면 true 리턴 아니면 false 리턴

비어있다의 기준은 사이즈 O 용량 X

v.resize(5);

벡터 v의 크기를 5로 변경

v.resize(5,10);

벡터 v의 크기를 5로 변경한 후 값 10으로 초기화

 

 

참고

서적: 명품 C++ 프로그래밍

사이트: https://blockdmask.tistory.com/70

https://life-with-coding.tistory.com/411

'프로그래밍 언어 > c++' 카테고리의 다른 글

[STL] 덱(Deque)  (0) 2021.10.12
[STL] 큐(Queue)  (0) 2021.10.11
STL  (0) 2021.09.19
C++ break 문과 continue문  (0) 2021.09.12
visual studio LINK2005 에러  (0) 2021.09.08

+ Recent posts