ポインタリストの値を別のポインタリストにコピーしようとしています。最初のポインタの割り当てを削除すると、値は2番目のリストに残りません。私はこれが具体的にはポインタのリストであり、アドレスが実際の値ではなくコピーされていることを知っています。私はこれをやってどうやって行くのだろうと思っていた。ポインタを持つ別のstdリストへのポインタを持つstdリストをコピーする
次は私のコードです:
#include <iostream>
#include <list>
int main(int argc, char const *argv[])
{
std::list<int*> pointer_list;
std::list<int*> int_list;
int one, two, three, four, five;
one = 1;
two = 2;
three = 3;
four = 4;
five = 5;
pointer_list.push_back(new int(one));
pointer_list.push_back(new int(two));
pointer_list.push_back(new int(three));
pointer_list.push_back(new int(four));
pointer_list.push_back(new int(five));
for (std::list<int*>::iterator iterator = pointer_list.begin(), end = pointer_list.end(); iterator != end; ++iterator)
{
std::cout << **iterator << std::endl;
}
for (std::list<int*>::iterator iterator = pointer_list.begin(), end = pointer_list.end(); iterator != end; ++iterator)
{
int_list.push_back(*iterator);
}
for (std::list<int*>::iterator iterator = pointer_list.begin(), end = pointer_list.end(); iterator != end; ++iterator)
{
delete *iterator;
}
for (std::list<int*>::iterator iterator = int_list.begin(), end = int_list.end(); iterator != end; ++iterator)
{
std::cout << "INT_LIST_AFTER DELETE: " << **iterator << std::endl;
}
for (std::list<int*>::iterator iterator = pointer_list.begin(), end = pointer_list.end(); iterator != end; ++iterator)
{
std::cout << "LIST_POINTER AFTER DELETE: " << **iterator << std::endl;
}
return 0;
}
次のように出力されます。
1
2
3
4
5
INT_LIST_AFTER DELETE: 1469317922
INT_LIST_AFTER DELETE: 1469317925
INT_LIST_AFTER DELETE: 1469317928
INT_LIST_AFTER DELETE: 0
INT_LIST_AFTER DELETE: 5
LIST_POINTER AFTER DELETE: 1469317922
LIST_POINTER AFTER DELETE: 1469317925
LIST_POINTER AFTER DELETE: 1469317928
LIST_POINTER AFTER DELETE: 0
LIST_POINTER AFTER DELETE: 5
はまた、どのように私は最後の要素を削除するに行きますか?リストを反復すると、条件iterator != end
がそれを防止し、リストの性質のために<=
を使用することはできません。 生がstd::vector
またはstd::list
などのSTLコンテナでポインタを所有している保存
なぜポインタを格納していますか?あなたが 'int'を扱っているだけなら、それらを使用してポインタをドロップしてください。 – NathanOliver
「どうやってこれをやっていくのだろうか」と思っていた。あなたはすでに問題を特定しました。あなたはぶら下がっているポインタでいっぱいのリストを持っています。ですから、ポインタを使わないでも、 'int *'の代わりに 'std :: shared_ptr'のようなリスト間で共有できるものを使ってもかまいません。 –
WhozCraig
可能であれば、別のポインタのリストのディープコピーを実装しようとしています。 –