vectorの私見

2635 ワード

C++、vectorを学ぶのは迂回できないが、vectorを使うのは、根本的な原因は、私自身が「動的配列をどのように作成するか」というよくある問題を決められないため、vectorを導入するしかなかった.
質問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は徹底的に使用されず、メモリの漏洩を引き起こします.