동일한 함수에서 여러 객체를 만들지 만 서로를 덮어 쓰지 않고 어떻게 생성 하는가?

StackOverflow https://stackoverflow.com/questions/609411

문제

함수에서 객체를 만들려고하지만 변수 이름을 런타임에 정의해야한다는 문제가 발생합니다. 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
            }
    }

}

도움이 되었습니까?

해결책

링크 된 목록을 원하는 경우 - 새로 전화하여 각 새 노드를 작성한 다음 목록에 추가하십시오.

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->next 목록의 헤드에 대한 포인터입니다). (이전 목록 구조는 'Open Ended'라고 할 수 있습니다.)

linklist  root = { 0, &root };
linklist *tail = &root;

...
a->next = tail;
tail->next = a;
...

조심하십시오 : 전체 목록을 반복하기위한 종료 조건 (예 : 목록에서 항목을 찾기위한)은 사용 된 구조 (원형 대 개방형)에 따라 다릅니다.

경고: 테스트되지 않은 코드!

O (1) 및 O (N)가 무엇을 의미하는지 잘 모르겠다면 '큰 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;
}

필요하다고 가정합니다 N 어떤 유형의 객체 T: 배열은 C ++에 매우 많이 존재합니다. STL은 다양한 oppertunities를 제공합니다. 컨테이너의 선택에 영향을 미치는 이러한 개체에 액세스하고 사용하는 방법을 정의해야합니다. 그러나 우리의 답변이 조금 덜 모호하고 더 도움이되도록 코드를 게시 할 수 있습니까?

나는 당신이 원하는 것을 정확히 잘 모르겠지만 당신이 사용할 수있는 것처럼 들립니다. 멀티 셋.

자세한 내용을 제공하면 더 많은 도움을 줄 수 있습니다.

우선 링크드리스트 구조물 이름을 노드로 바꾸고 헤드를 보유하는 새로운 링크 된 목록 구조 및 (아마도) 현재 / 테일 포인터를 추가하는 것이 좋습니다. 그런 다음이 클래스 / struct에서 조작 할 수있는 메소드를 구현해야합니다.

현재 누락 된 것은 목록을 가로 지르는 방법입니다 (끝까지 다음 포인터를 재귀 적으로 얻습니다). 마지막 요소로 포인터를 반환합니다. 일단 있으면 해당 요소의 다음 포인터를 새로 만든 객체로 설정할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top