如何从字符串列表更改为指向字符串的指针列表
how to change from a list of strings to a list of pointers to strings
我试图让它返回一个字符串,但我无法让它工作。 目标是拥有一个指向字符串的双向链表。 我不允许它包含字符串,它必须指向它。 目前,我在让我的程序使用它时遇到问题。 例如,它似乎总是返回命令是什么,它让我感到困惑并且难以解释。
#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
.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;
}
}
考虑以下示例:
#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;
}
此示例包含两个函数,一个函数store_value
其行为类似于您的append
函数(除了,出于此示例的目的处理std::vector
)和第二个函数显示获取引用地址的可能危险(这是我相信 Manu343726 和 Mats Petersson 也在前奏的可能危险之一)。
这很危险的原因是,在函数完成后,create_and_store_value
中声明的字符串不会保留。 这意味着我们留下了一个指向内存的指针,这可能不是我们所期望的。 另一方面,在 main
函数内创建一个字符串是可以的,因为那里的字符串会一直持续到程序结束。
为了进一步帮助您,我建议您编辑您的问题,给我们一个您如何调用函数的示例。 我建议粘贴代码的最小条带化版本,包括如何调用 append 的示例,例如:
#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;
}
在上面,将注释和点替换为相关代码。
相关文章:
- C++:如何使函数只返回作为列表一部分的字符串
- C++ 创建包含链表和字符串的对象的链接列表时出错
- 在 c++ 中多次更改字符串列表
- C++未知长度字符串的数组,其行为类似于 Python 字符串列表
- 如何将包含括号的字符串列表平展为单个列表?
- 无法在声明时使用初始值设定项列表初始化常量字符*/字符串数组的向量
- C++完全复制要字符串的字符列表,而不会忽略多个空格
- (C++) 字符串文本与参数列表不匹配
- C++使用旧编译器GCC 4.4.0在结构列表中查找字符串
- 如何存储字符串列表
- 如何在数组或链接列表中查找特定字符串
- C++ EnumWindows,将列表存储在字符串数组中
- 给定字符串和单词 S 的列表,检查列表中是否存在 S
- C 需要帮助的作业程序,该程序在文件列表中读取并在每个双重的双重列表中添加一个字符串
- 查找可变参数列表的字符串格式指定符
- 在链接列表中添加字符串的简单方法
- 嵌套列表(字符串向量的向量)初始化失败
- 通过单词列表将两个字符串移动以比较每个单词
- 链接的列表字符串分类问题
- 穿过链接列表以查找字符串