vectorの私見
2635 ワード
C++、vectorを学ぶのは迂回できないが、vectorを使うのは、根本的な原因は、私自身が「動的配列をどのように作成するか」というよくある問題を決められないため、vectorを導入するしかなかった.
質問1:vectorのpush_backはデータを追加します.メモリコピーですか、ポインタが指しますか.
まず、メモリコピーであれば、プログラマーにとっては絶対に安全です.例えば、androidという文字列を格納するためにメモリを申請しました.それから、この文字列をpush_backはvector変数に値を割り当て、vectorはこのメモリを1部コピーし、別のメモリアドレスにコピーします.それでは、私にとって、絶対に安全です.元のandroid文字列を他のものにしたり、破棄したりしても、どうでもいいです.vectorはもう1部コピーしたからです.しかし問題はvectorがこのようにするのは空間を占めていることだ.ではvecotrはどうやって作ったのでしょうか.
実際の状況を見て、コードを
vectorの付与操作は,ポインタが1つだけ格納され,ポインタsを指す.
だから、delete[]sを勝手にしてはいけないと結論しました.そうしないと、データが失われます.
質問2:vectorの2つの変数間の割り当て値、例えばV 1=V 2は、メモリコピーですか、ポインタ指向ですか.
まず考えてみましょう.問題1によれば、vectorがメモリに慎重に使用していることから、ここではポインタが指しているだけで、V 1を空にすると、V 2の中のデータもないと判断します.
では、実際の状況はこうですか?コードを見て、上のコードの基礎の上で、何行プラスしました
上記の結果から、私たちは結論を得ました.
V 2=V 1はメモリコピーです
質問3:vectorのclearとswapの違いは何ですか?
このコード検証は書きにくいが、STLの説明によると、swapはclearよりも徹底しており、使用したメモリがオペレーティングシステムに返されることを保証している.
結論:swapを使うのは少し良くて、clearについて、みんなはすべてメモリの漏れを引き起こすと言って、clearは本当に空間を解放していないためです
個人的な結論:vectorはメモリの管理が厳しい
構想拡張:C++を遊ぶには、メモリ管理に注意しなければならない.
1.newはとても爽やかで、さっぱりしてdeleteを忘れないでください.そうしないと、漏れたらポットを1本飲むのに十分です.
2.but、newを見てdeleteしないでください.そうしないとvectorはどうしますか.問題1のように、vectorのandroidはmeizuになります.
3.メモリを解放、メモリを解放!!!メモリが完全に解放されているかどうかを見てみましょう.例えば、swapで徹底的に使用すると、clearは徹底的に使用されず、メモリの漏洩を引き起こします.
質問1:vectorのpush_backはデータを追加します.メモリコピーですか、ポインタが指しますか.
まず、メモリコピーであれば、プログラマーにとっては絶対に安全です.例えば、androidという文字列を格納するためにメモリを申請しました.それから、この文字列をpush_backはvector変数に値を割り当て、vectorはこのメモリを1部コピーし、別のメモリアドレスにコピーします.それでは、私にとって、絶対に安全です.元のandroid文字列を他のものにしたり、破棄したりしても、どうでもいいです.vectorはもう1部コピーしたからです.しかし問題はvectorがこのようにするのは空間を占めていることだ.ではvecotrはどうやって作ったのでしょうか.
実際の状況を見て、コードを
#include
#include
using namespace std;
int main()
{
// vector
vector f;
// s , 50 , android
char* s = new char[50] {"android"};
// vector
f.push_back(s);
// , android
printf("%s
", f[0]);
// s , meizu
memset(s, 0, strlen(s));
memcpy_s(s, 5, "meizu", 5);
// , , ? , meizu
printf("%s
", f[0]);
}
コードの結果によれば、間違いなく、vectorの付与操作は,ポインタが1つだけ格納され,ポインタsを指す.
だから、delete[]sを勝手にしてはいけないと結論しました.そうしないと、データが失われます.
質問2:vectorの2つの変数間の割り当て値、例えばV 1=V 2は、メモリコピーですか、ポインタ指向ですか.
まず考えてみましょう.問題1によれば、vectorがメモリに慎重に使用していることから、ここではポインタが指しているだけで、V 1を空にすると、V 2の中のデータもないと判断します.
では、実際の状況はこうですか?コードを見て、上のコードの基礎の上で、何行プラスしました
#include
#include
using namespace std;
int main()
{
// vector
vector f;
// s , 50 , android
char* s = new char[50] {"android"};
// vector
f.push_back(s);
// , android
printf("%s
", f[0]);
// s , meizu
memset(s, 0, strlen(s));
memcpy_s(s, 5, "meizu", 5);
// , meizu
printf("%s
", f[0]);
// vector
vector f2;
//f f2
f2 = f;
vector nullChar;
// f
f.swap(vector());
// f2 , , ? ? meizu ?!!!
printf("%s
", f2.at(0));
// , f, ~~~~ , 0
printf("%d
", f.size());
system("pause");
}
上記の結果から、私たちは結論を得ました.
V 2=V 1はメモリコピーです
質問3:vectorのclearとswapの違いは何ですか?
このコード検証は書きにくいが、STLの説明によると、swapはclearよりも徹底しており、使用したメモリがオペレーティングシステムに返されることを保証している.
結論:swapを使うのは少し良くて、clearについて、みんなはすべてメモリの漏れを引き起こすと言って、clearは本当に空間を解放していないためです
個人的な結論:vectorはメモリの管理が厳しい
構想拡張:C++を遊ぶには、メモリ管理に注意しなければならない.
1.newはとても爽やかで、さっぱりしてdeleteを忘れないでください.そうしないと、漏れたらポットを1本飲むのに十分です.
2.but、newを見てdeleteしないでください.そうしないとvectorはどうしますか.問題1のように、vectorのandroidはmeizuになります.
3.メモリを解放、メモリを解放!!!メモリが完全に解放されているかどうかを見てみましょう.例えば、swapで徹底的に使用すると、clearは徹底的に使用されず、メモリの漏洩を引き起こします.