Part.I 주의
사용시 vector
주의사항 :
- 인용 추가
#include <vector>
- 바로 "배열"이라고 할 수 있지만! 함수의 값을 수정하려면 추가해야 합니다
&
! ! !
몇 가지 요령:
// 将 b 中的元素去重并从小到大排序
sort(b.begin(),b.end());
b.erase(unique(b.begin(),b.end()),b.end());
II부 기능
기능 목록:
함수 이름 | 의미 |
---|---|
begin() |
컨테이너의 첫 번째 요소를 가리키는 반복자를 반환합니다. |
end() |
begin() 일반적 으로 와 함께 사용되는 컨테이너의 마지막 요소 다음 위치를 가리키는 반복자를 반환합니다 . |
rbegin() |
마지막 요소를 가리키는 반복자를 반환합니다. |
rend() |
첫 번째 요소 위치 이전 위치를 가리키는 반복자를 반환합니다. |
size() |
실제 요소 수를 반환합니다. |
max_size() |
최대 요소 수를 반환합니다. 보통 232-1로 큰 값이므로 이 함수를 거의 사용하지 않습니다. |
resize() |
실제 요소 수를 변경합니다. |
capacity() |
현재 용량을 반환합니다. |
empty() |
컨테이너에 요소가 있는지 확인하고 요소가 없으면 true를 반환하고 그렇지 않으면 false를 반환합니다. |
reserve() |
용기의 용량을 늘립니다. |
shrink _to_fit() |
현재 요소에서 실제로 사용하는 크기와 같도록 메모리를 줄입니다. |
운영자[] |
[ ] 연산자는 오버로드되며 벡터 컨테이너의 요소는 배열의 요소에 액세스하는 것과 같은 첨자를 통해 액세스하거나 수정할 수 있습니다. |
at() |
경계 확인 인덱스를 사용하여 요소에 액세스합니다. |
front() |
첫 번째 요소에 대한 참조를 반환합니다. |
back() |
마지막 요소에 대한 참조를 반환합니다. |
data() |
컨테이너의 첫 번째 요소에 대한 포인터를 반환합니다. |
assign() |
기존 콘텐츠를 새 요소로 바꿉니다. |
push_back() |
시퀀스의 끝에 요소를 추가합니다. |
pop_back() |
시퀀스의 끝에서 요소를 제거합니다. |
insert() |
지정된 위치에 하나 이상의 요소를 삽입합니다. |
erase() |
요소 또는 요소 블록을 밖으로 이동합니다. |
clear() |
모든 요소가 제거되고 컨테이너 크기가 0이 됩니다. |
swap() |
두 컨테이너의 모든 요소를 교환합니다. |
emplace() |
지정된 위치에 직접 요소를 생성합니다. |
emplace_back() |
시퀀스의 끝에 요소를 생성합니다. |
1장 생성자
vector()
: 빈 벡터 생성- :
vector(int nSize)
요소 개수 nSize로 벡터 생성 vector(int nSize,const t& t)
: 벡터를 만들고, 요소의 개수는 nSize, 값은 t- :
vector(const vector&)
복사 생성자 vector(begin,end)
:[begin,end)
범위에 있는 다른 배열의 요소를 벡터에 복사합니다.
다음은 생성자를 호출하는 예입니다.
// 定义了10个整型元素的向量,初始化为 1
vector<int> a(10,1);
// 定义一个二维 vector 向量,所有元素初始化为 1
vector<int> a(10,1);
vector<vector<int>> aa(10,a);
// 通过 int[] 构造并初始化 vector
int b[7] = {
1,2,3,4,5,9,8};
vector<int> a(b,b+7);
// 直接用数组构造
vector<int> a({
1,2,3,4,5,9,8});
Chap.II 기능 추가
void push_back(const T& x)
: 벡터 끝에 요소 X를 추가합니다.iterator insert(iterator it,const T& x)
: 벡터의 반복자가 요소를 가리키기 전에 요소 x를 추가합니다.iterator insert(iterator it,int n,const T& x)
: 벡터의 반복자가 요소를 가리키기 전에 n개의 동일한 요소 x를 추가합니다.iterator insert(iterator it,const_iterator first,const_iterator last)
: 벡터의 반복자가 요소를 가리키기 전에 동일한 유형의 다른 벡터[first,last)
사이에 데이터를 삽입합니다.
다음은 간단한 작동 예입니다.
vector<int> a(10,1); // 10个1
auto itr=a.begin()+3; // 得到第 3 个迭代器
a.insert(itr,2,8); // 在迭代器的位置处插入 2 个 8,a=[1 1 1 8 8 1 1 1 1 1 1 1]
3장 삭제 기능
iterator erase(iterator it)
: 벡터에서 반복자가 가리키는 요소를 삭제합니다.iterator erase(iterator first,iterator last)
[first,last)
: 벡터 의 요소 삭제void pop_back()
: 벡터의 마지막 요소 삭제void clear()
: 벡터의 모든 요소를 비웁니다.
다음은 간단한 작동 예입니다.
auto tmp=a.erase(a.begin()+2,a.begin()+4);
a.pop_back(); // 删除最后一个元素
vector
첫 번째 문장의 의미: 3번째 요소에서 5번째 요소(포함되지 않음)까지 두 개의 요소가 삭제 되고 삭제 후 3번째 요소의 반복자가 반환됩니다.
Chap.IV 순회 함수
T at(int pos)
: 위치 pos에 있는 요소에 대한 참조를 반환합니다.T front()
: 첫 번째 요소에 대한 참조를 반환합니다.T back()
: 꼬리 요소에 대한 참조를 반환합니다.iterator begin()
: 첫 번째 요소를 가리키는 벡터 헤드 포인터를 반환합니다.iterator end()
: 벡터의 마지막 요소의 다음 위치를 가리키는 벡터 꼬리 포인터를 반환합니다.reverse_iterator rbegin()
: 역방향 반복자, 마지막 요소를 가리킴reverse_iterator rend()
: 첫 번째 요소 앞의 위치를 가리키는 역 반복자
알아채다:
- vector는 특정 인덱스의 요소 값을 가져오는
[]
데 사용할 있지만python
그렇게 슬라이스할 수는 없습니다. end()
*(vec.end()-1)
마지막 요소의 값인 마지막 요소 뒤의 반복자를 반환합니다.
vector<int> b({
1,2,3,4,5,6,7,8});
cout<<b.front()<<" "<<b.back()<<endl; // 1 8
cout<<*b.begin()<<" "<<*(b.end()-1)<<endl; // 1 8
Chap.V 판정/크기/기타 기능
bool empty() const
: 벡터가 비어 있는지 확인, 비어 있으면 벡터에 요소가 없음int size() const
: 벡터의 요소 수를 반환합니다.int capacity() const
: 현재 벡터가 보유할 수 있는 최대 요소 값을 반환합니다.int max_size() const
: 허용 가능한 최대 벡터 요소 수를 반환합니다.void swap(vector&)
: 같은 타입의 두 벡터의 데이터 교환void assign(int n,const T& x)
: 벡터의 처음 n개 요소의 값을 x로 설정void assign(const_iterator first,const_iterator last)
:[first,last)
벡터의 요소가 현재 벡터 요소로 설정됩니다.
cout<<b.empty()<<endl;
cout<<b.size()<<" "<<b.capacity()<<" "<<b.max_size()<<endl;
printVec(b);
b.assign(6,10); // 指定 b 中的元素为6个10
printVec(b);
b.assign(b.begin()+1,b.end()-1); // 去掉 b 第一个元素和最后一个元素
printVec(b);
Part.III 코드
다음은 Vector
학습 과정에서 사용되는 코드입니다(사실 위 코드를 요약한 것입니다).
#include <iostream>
#include <iomanip>
#include <vector>
using namespace std;
int main()
{
auto printVec=[](vector<int> vec) {
for(auto& c:vec) cout << c << " ";cout << endl;};
// 构造
vector<int> a(10,1);
printVec(a);
// 插入
auto itr=a.begin()+3;
auto tmp = a.insert(itr,2,8);
cout << *(tmp+1)<<endl;
printVec(a);
// 删除
tmp=a.erase(a.begin()+2,a.begin()+4);// 删除的元素不包含 itr+1
cout <<* tmp<<endl;
printVec(a);
a.pop_back();
printVec(a);
// 修改
a[3]=3;
a.push_back(4);
printVec(a);
// 遍历
vector<int> b({
1,2,3,4,5,6,7,8});
cout<<b.front()<<" "<<b.back()<<endl;
cout<<*b.begin()<<" "<<*(b.end()-1)<<endl;
// 其他函数
cout<<b.empty()<<endl;
cout<<b.size()<<" "<<b.capacity()<<" "<<b.max_size()<<endl;
printVec(b);
b.assign(6,10); // 指定 b 中的元素为6个10
printVec(b);
b.assign(b.begin()+1,b.end()-1); // 去掉 b 第一个元素和最后一个元素
printVec(b);
getchar();
return 0;
}
출력은 다음과 같습니다.
1 1 1 1 1 1 1 1 1 1
8
1 1 1 8 8 1 1 1 1 1 1 1
8
1 1 8 1 1 1 1 1 1 1
1 1 8 1 1 1 1 1 1
1 1 8 3 1 1 1 1 1 4
1 8
1 8
0
8 8 2305843009213693951
1 2 3 4 5 6 7 8
10 10 10 10 10 10
10 10 10 10