C++ 如何从字符串列表更改为指向字符串的指针列表

C++ 如何从字符串列表更改为指向字符串的指针列表,c++,pointers,doubly-linked-list,C++,Pointers,Doubly Linked List,我试图让它返回一个字符串,但我在让它工作时遇到了困难。目标是有一个指向字符串的双链接列表。我不允许它包含字符串,它必须指向它。目前我很难让我的程序使用它。例如,它似乎总是返回命令是什么,这让我很困惑,也很难解释 #ifndef DOUBLY_LINKED_LIST_H #define DOUBLY_LINKED_LIST_H #include <iostream> #include <string> //#include "Playlist.h" using names

我试图让它返回一个字符串,但我在让它工作时遇到了困难。目标是有一个指向字符串的双链接列表。我不允许它包含字符串,它必须指向它。目前我很难让我的程序使用它。例如,它似乎总是返回命令是什么,这让我很困惑,也很难解释

#ifndef DOUBLY_LINKED_LIST_H
#define DOUBLY_LINKED_LIST_H
#include <iostream>
#include <string>
//#include "Playlist.h"

using namespace std;

class DoublyLinkedList
{
public:
    DoublyLinkedList();
    ~DoublyLinkedList();
    bool empty();
    void append(string& s);
    void insertBefore(string& s);
    void insertAfter(string& s);
    void remove(string& s);
    void begin();
    void end();
    bool next();
    bool prev();
    bool find(string& s);
    const string& getData();
private:
    class Node
    {
    public:
        Node (string *data, Node *next, Node *prev)
        {m_data = data; m_next = next; m_prev = prev;}
        string *m_data;
        Node * m_next;
        Node * m_prev;
    };
    Node *m_head;
    Node *m_tail;
    Node *m_current;
};
#endif // DOUBLYLINKEDLIST_H_INCLUDED
\ifndef双链接列表\u H
#定义双链接列表
#包括
#包括
//#包括“Playlist.h”
使用名称空间std;
类双链接列表
{
公众:
双链接列表();
~DoublyLinkedList();
bool empty();
无效附加(字符串和s);
无效插入之前(字符串和s);
无效插入符(字符串和s);
清除空隙(管柱和s);
void begin();
空端();
bool next();
bool-prev();
布尔查找(字符串和s);
常量字符串&getData();
私人:
类节点
{
公众:
节点(字符串*数据,节点*下一个,节点*上一个)
{m_data=data;m_next=next;m_prev=prev;}
字符串*m_数据;
Node*m_next;
节点*m_prev;
};
节点*m_头;
节点*m_尾;
节点*m_电流;
};
#endif//包含双链接列表
.cpp文件>>>

const string& DoublyLinkedList::getData()
{
    string *m_tmp;
    m_tmp = m_current->m_data;
    cout << m_current->m_data << endl;
    //cout << "returning: " << m_current->m_data << endl;
   // return m_current->m_data;
   return *m_tmp;
}

void DoublyLinkedList::append(string &s)
{
    if (!m_head)
    {
        m_head = new Node(&s, NULL, NULL);
        m_tail = m_head;
        m_current = m_head;
    }
    else
    {
        m_tail->m_next = new Node (&s, NULL, m_tail);
        m_tail = m_tail->m_next;
        m_current = m_tail;
    }
}
常量字符串&DoublyLinkedList::getData() { 字符串*m_tmp; m_tmp=m_当前->m_数据; cout m_data m_next; m_电流=m_尾巴; } }
考虑以下示例:

#include <iostream>
#include <vector>
#include <string>

using namespace std;

void store_value(vector<string*>& vec, string& str)
{
  vec.push_back(&str);
}

void create_and_store_value(vector<string*>& vec)
{
  string str("This string is temporary");
  store_value(vec, str);
}

int main(int argc, char** argv)
{
  vector<string*> pointers;

  create_and_store_value(pointers);
  cout << *pointers.back() << endl;

  string myPersistingString("Yay");
  store_value(pointers, myPersistingString);
  cout << *pointers.back() << endl;

  return 0;
}

在上面,用相关代码替换注释和点。

两个问题:第一:你必须实现你自己的链表(也就是说,这是学习编程的练习/家庭作业),或者你可以使用标准库提供的实现的共容器?第二:第二个列表的指针必须指向第一个列表的字符串,换句话说,第二个列表用于共享第一个字符串列表的所有权?我必须实现我自己的链接列表,它是一个双链接列表,有一个next,prev,还有一个指向字符串的指针。第二个问题呢?我不知道如何回答。我想Manu343726所指的是“带指针的列表”可以指向“由列表拥有”的对象,也可以指向创建的对象,该对象属于列表外的某个实体。这会影响链接列表中对象的创建和销毁方式以及链接列表和其中内容的“使用方式”。如果字符串属于列表之外的内容,那么它可能会在列表不知道的情况下更改。如果它完全被列表“拥有”,那么列表对内容负责。。。
#include <blah>

class DoubleLinkedList
{
    DoubleLinkedList(void)
    {
        // Include these inline to make copying and pasting simpler.
    }

    ~DoubleLinkedList(void)
    {
        ...
    }

    append(...) { ... }
    getData(...) { ... }
};

int main(int argc, char** argv)
{
    DoubleLinkedList dll;

    // Show us how you are using this list

    return 0;
}