CTypedPtrListからCTypedPtrArrayにするには – プログラミング – Home

通知
すべてクリア

[解決済] CTypedPtrListからCTypedPtrArrayにするには


hassy
 hassy
(@hassy)
ゲスト
結合: 18年前
投稿: 3
Topic starter  

始めまして。hassyと申します。MFC利用、VC++6.0の環境です。

現在処理の中で
typedef CTypedPtrList<CObList, VALUE*> ValueList;を使って
ValueList *m_pValueList;
ValueList m_SeqValueList;
-- 省略 --
int iCount;
POSITION pos;
VALUE *pValue;
m_pValueList = &m_SeqValueList;
iCount = (int)m_pValueList->GetCount( );
pos = m_pValueList->GetHeadPosition();
pos = m_pValueList->GetAt((POSITION)0);
for( int i=0; i<iCount; i++ ){
pValue = m_pValueList->GetNext( pos );
delete pValue;
}
m_pValueList->RemoveAll();
という処理をしているのですが、ListではなくCtypedArrayにした場合は、
上記の処理をどう書き換えればいいのでしょうか?
変な質問で申し訳ありませんが、よろしくお願いします。


引用未解決
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

なんだかよくわからないですが、CArrayのリファレンスは読まれましたか?
CTypedPtrArrayも使い方は同じですよ。

それと、載せてもらったコードですがちょっと理解できません。

>m_pValueList;
を使う意味は?

> ValueList *m_pValueList;
> ValueList m_SeqValueList;
はどこに記述していますか?m_とつく以上メンバ変数でしょうか?

>CTypedPtrList<CObList, VALUE*>
ポインタならばCObListではなくCPtrListのほうでは?

>iCount = (int)m_pValueList->GetCount( );
全体のアイテム数を取得しなくてもposがNULLになるかみればいいです。

>pos = m_pValueList->GetAt((POSITION)0);
はどういう意味でしょうか?
0番目のposをとるという意味ではないですけど。

typedef CTypedPtrList<CPtrList, VALUE*> ValueList;

ValueList m_SeqValueList;

// すべての要素を削除する

POSITION pos = m_SeqValueList.GetHeadPosition();
VALUE* pValue;

while (pos)
{
pValue = m_SeqValueList.GetNext(pos);
delete pValue;
}
m_SeqValueList.RemoveAll();


返信引用
hassy
 hassy
(@hassy)
ゲスト
結合: 18年前
投稿: 3
Topic starter  

説明が足らず、申し訳ありません。
>m_pValueList;
デストラクタクラスなので、m_pValueList内にあるp_Valueを
全て削除したいのです。

>> ValueList *m_pValueList;
>> ValueList m_SeqValueList;
>はどこに記述していますか?m_とつく以上メンバ変数でしょうか?
ヘッダファイルに記述していて、メンバ変数です。

>> CTypedPtrList<CObList, VALUE*>
>ポインタならばCObListではなくCPtrListのほうでは?
確かにそうですが、
この部分をCTypedPtrList<CObList, VALUE*>から
CTypedPtrArray<CobArray,VALUE*>に変更した場合に、
どう変更すればいいのでしょうか。

>iCount = (int)m_pValueList->GetCount( );
全体のアイテム数を取得しなくてもposがNULLになるかみればいいです。

>>pos = m_pValueList->GetAt((POSITION)0);
>はどういう意味でしょうか?
>0番目のposをとるという意味ではないですけど。
申し訳ありません。この部分は要らない部分です。

上記の内容だと、わかりづらいので再度ソースコードを張らせて貰います。

--Header--
typedef CTypedPtrList<CObList, VALUE*> ValueList;
ValueList *m_pValueList;
ValueList m_SeqValueList;
--CPP--
CItemInfo::CItemInfo(){
 m_pValueList = &m_SeqValueList;
}
CItemInfo::~CItemInfo(){
 int iCount;
 POSITION pos;
VALUE *pValue;

m_pValueList = &m_SeqValueList;
iCount = (int)m_pValueList->GetCount( );
pos = m_pValueList->GetHeadPosition( );
for( int i=0; i<iCount; i++ ){
pValue = m_pValueList->GetNext( pos );
delete pValue;
}
m_pValueList->RemoveAll();
}

m_pValueList内にあるpValueを削除していく処理なのですが、typedefで
記述されている部分CTypedPtrList<CObList, VALUE*> ValueList;を
CTypedPtrArray<CObArray, VALUE*> ValueArray;に変更した場合に、
上記のソースをどのように変更すればいいのでしょうか?


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

再度、CArrayのリファレンスは読まれましたか?

CArrayは基本的に普通の配列のようにインデックスでアクセスできます。
POSITIONのようなものはありません。
ですので単純に GetSize までインクリメントして、GetAtやoperator[]で
値を取得していくだけです。

>>m_pValueList;
>デストラクタクラスなので、m_pValueList内にあるp_Valueを
>全て削除したいのです。
ナニいっているのか理解できません。

とりあえず、提示されたコードをレビューしたとき、
私ならこう直せと指摘する。

--Header--
//typedef CTypedPtrList<CObList, VALUE*> ValueList; // CPtrListにすべき
typedef CTypedPtrList<CPtrList, VALUE*> ValueList;

//ValueList *m_pValueList; // 必要なんでしょうか?
ValueList m_SeqValueList;
--CPP--
CItemInfo::CItemInfo(){
 //m_pValueList = &m_SeqValueList; // 必要なんでしょうか?
}
CItemInfo::~CItemInfo(){
 //int iCount; // posでみるからイネラ
 POSITION pos;
VALUE *pValue;

//m_pValueList = &m_SeqValueList; // 必要なんでしょうか?
//iCount = (int)m_pValueList->GetCount( ); // posでみるからイネラ
pos = m_pValueList->GetHeadPosition( );
//for( int i=0; i<iCount; i++ ){ // posでみるからwhileへ変更
while (pos)
pValue = m_pValueList->GetNext( pos );
delete pValue;
}
m_pValueList->RemoveAll();
}


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

訂正)

--Header--
//typedef CTypedPtrList<CObList, VALUE*> ValueList; // CPtrListにすべき
typedef CTypedPtrList<CPtrList, VALUE*> ValueList;

//ValueList *m_pValueList; // 必要なんでしょうか?
ValueList m_SeqValueList;
--CPP--
CItemInfo::CItemInfo(){
 //m_pValueList = &m_SeqValueList; // 必要なんでしょうか?
}
CItemInfo::~CItemInfo(){
 //int iCount; // posでみるからイネラ
 POSITION pos;
VALUE *pValue;

//m_pValueList = &m_SeqValueList; // 必要なんでしょうか?
//iCount = (int)m_pValueList->GetCount( ); // posでみるからイネラ
pos = m_SeqValueList.GetHeadPosition( );
//for( int i=0; i<iCount; i++ ){ // posでみるからwhileへ変更
while (pos)
pValue = m_SeqValueList.GetNext( pos );
delete pValue;
}
m_SeqValueList.RemoveAll();
}


返信引用
hassy
 hassy
(@hassy)
ゲスト
結合: 18年前
投稿: 3
Topic starter  

> 再度、CArrayのリファレンスは読まれましたか?
リファレンスを読んだ所、CArrayとCTypedPtrArrayも同じでした。
ありがとうございます。

> CArrayは基本的に普通の配列のようにインデックスでアクセスできます。
> POSITIONのようなものはありません。
> ですので単純に GetSize までインクリメントして、GetAtやoperator[]で
> 値を取得していくだけです。
ありがとうございます。別物だとばっかり思っていたので、CArrayと同じだった
とは・・・今度からリファレンスしっかり読むようにします。
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました