回答編集履歴
3
コード追記(clear)
answer
CHANGED
@@ -27,6 +27,15 @@
|
|
27
27
|
v.resize(10000);
|
28
28
|
std::cout << "resize:" << v.capacity() << std::endl;
|
29
29
|
|
30
|
+
v.clear();
|
31
|
+
std::cout << "clear:" << v.capacity() << std::endl;
|
32
|
+
|
33
|
+
std::vector<char>().swap(v);
|
34
|
+
std::cout << "swap:" << v.capacity() << std::endl;
|
35
|
+
|
36
|
+
v.resize(10000);
|
37
|
+
std::cout << "resize:" << v.capacity() << std::endl;
|
38
|
+
|
30
39
|
while (!v.empty())
|
31
40
|
{
|
32
41
|
v.erase(v.begin());
|
@@ -52,6 +61,9 @@
|
|
52
61
|
erase all:10000
|
53
62
|
swap:0
|
54
63
|
resize:10000
|
64
|
+
clear:10000
|
65
|
+
swap:0
|
66
|
+
resize:10000
|
55
67
|
erase all & shrink_to_fit:0
|
56
68
|
resize:10000
|
57
69
|
clear & shrink_to_fit:0
|
2
文言修正
answer
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
> vectorにあるeraseをfor文で回すのと変わらなくないかと思っています。
|
2
2
|
swapによるメモリ解放とeraseによるメモリ開放違いってなんなんでしょうか?
|
3
3
|
|
4
|
-
`erase()`や`clear()`では`vector`が確保したメモリは
|
4
|
+
`erase()`や`clear()`では`vector`が確保したメモリは解放されません。
|
5
|
-
C++11以降なら`erase()`や`clear()`の後に[shrink_to_fit()](https://cpprefjp.github.io/reference/vector/vector/shrink_to_fit.html)を呼ぶことでも
|
5
|
+
C++11以降なら`erase()`や`clear()`の後に[shrink_to_fit()](https://cpprefjp.github.io/reference/vector/vector/shrink_to_fit.html)を呼ぶことでも解放するよう要求できます。(解放される保証はないですが)
|
6
6
|
```C++
|
7
7
|
#include<iostream>
|
8
8
|
#include<vector>
|
1
文言修正
answer
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
swapによるメモリ解放とeraseによるメモリ開放違いってなんなんでしょうか?
|
3
3
|
|
4
4
|
`erase()`や`clear()`では`vector`が確保したメモリは開放されません。
|
5
|
-
C++11以降なら`erase()`や`clear()`の後に[shrink_to_fit()](https://cpprefjp.github.io/reference/vector/vector/shrink_to_fit.html)を呼ぶことでも開放できます。
|
5
|
+
C++11以降なら`erase()`や`clear()`の後に[shrink_to_fit()](https://cpprefjp.github.io/reference/vector/vector/shrink_to_fit.html)を呼ぶことでも開放するよう要求できます。(開放される保証はないですが)
|
6
6
|
```C++
|
7
7
|
#include<iostream>
|
8
8
|
#include<vector>
|