同じ関数で複数のオブジェクトを作成しますが、互いに上書きしませんか?
質問
関数でオブジェクトを作成しようとしていますが、実行時に変数名を定義する必要があるという問題に直面しています。 neが関数内で変数を動的に作成し、できれば関数が最後に呼び出されたときに作成されたものとは異なる名前を付けることができる配列を使用して、何かできることがありますか?
*** C ++で作業しています
編集: 今は何も持っていないので、コードを渡すことはできません。私が今持っているのは擬似コードだけです。
基本的に、リンクリストを作成しようとしていますが、使用するaddNewItem()メソッドでは、同じメソッドを使用して異なるオブジェクトを作成する必要があります。
編集: 技術的には、リンクリストを作成するのではなく、単に機能を理解するための概念実証にすぎません。
編集:コードは次のとおりです:
#include "linklist.h"
#include <iostream>
using namespace std;
struct linklist
{
Student * obj;
linklist * next;
};
linklist * head;
int main()
{
}
void addStudent(char * newsdnt)
{
if(!head){
linklist * a = new linklist;
a->obj = new Student(newsdnt);
a->next = 0;
head = a;
return;
}else{
linklist * a = new linklist;
a->obj = new Student(newsdnt);
a->next = 0;
if(!head->next){
head->next = a; // Can only have one or two items in list
}
}
}
解決
リンクリストが必要な場合-newを呼び出して新しいノードを作成し、リストに追加します。
このようなSmth:
void addStudent(char * newsdnt)
{
linklist* a = new linklist;
a.obj = new Student(newsdnt);
a.next = 0;
if( head == 0 ) {
head = a;
} else {
linklist* whereToAdd = head;
while( whereToAdd.next != 0 ) {
whereToAdd = whereToAdd.next;
}
whereToAdd.next = a;
}
}
他のヒント
(単独の)リンクリストを作成する最も簡単な方法は、新しいアイテムを先頭に追加することです:
linklist *head = 0;
...
a->next = head;
head = a;
...
O(N)時間の最後に項目を追加することが許容される場合、毎回リストをスキャンして終了を見つけます。
linklist head;
...
a->next = 0;
item = &head;
while (item->next != 0)
item = item->next;
item->next = a;
...
O(1)の時点でリストの末尾に新しいアイテムを追加する必要がある場合、循環リストとリストの末尾へのポインターを保持します( tail-&gt; next
はリストの先頭へのポインターです)。 (以前のリスト構造は「オープンエンド」と呼ばれていました。)
linklist root = { 0, &root };
linklist *tail = &root;
...
a->next = tail;
tail->next = a;
...
注意:リスト全体を反復する(たとえば、リスト内のアイテムを見つける)ための終了条件は、使用する構造(循環型とオープンエンド型)によって異なります。
警告:テストされていないコード!
O(1)とO(N)の意味がわからない場合は、「Big O」表記を読んでください。
ベクトルを提案します:
#include <vector>
using namespace std;
void foo()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
cout << v[0] + v[1] << endl;
}
何らかのタイプの T
: N
オブジェクトが必要であると仮定すると、C ++には配列が非常に多く存在します。そのため、多くの機能を提供するSTLも同様です。これらのオブジェクトにアクセスして使用する方法を定義する必要があります。これは、コンテナの選択に影響します。しかし、私たちの答えが少し曖昧になるように(そしてあなたにもっと役立つように)コードを投稿できますか?
あなたが何を望むのか正確にはわかりませんが、マルチセットを使用できるように聞こえます。
詳細を入力してください。ヘルプを提供できる場合があります。
まずは、linkedlist構造体の名前をnodeに変更し、ヘッドと(おそらく)現在/テールポインターを保持する新しいリンクリスト構造体を追加することをお勧めします。その後、このクラス/構造体にメソッドを実装して、操作できるようにします。
現時点で不足しているのは、リストを走査し(最後に戻るまで次のポインターを再帰的に取得する)、最後の要素へのポインターを返すメソッドです。それができたら、その要素の次のポインターを新しく作成したオブジェクトに設定できます。