回答編集履歴

3

コード追記(clear)

2020/07/15 08:29

投稿

SHOMI
SHOMI

スコア4079

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

文言修正

2020/07/15 08:29

投稿

SHOMI
SHOMI

スコア4079

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

文言修正

2020/07/15 07:42

投稿

SHOMI
SHOMI

スコア4079

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>