📜  C++ |新增和删除|问题3(1)

📅  最后修改于: 2023-12-03 14:59:48.053000             🧑  作者: Mango

C++ | 新增和删除 | 问题3

本文将介绍在C++中如何新增和删除元素,以及处理可能出现的问题。

新增元素
数组

在C++中,可以使用标准库的std::vector类来实现动态数组。要在向量的末尾添加新元素,可以使用push_back()方法。以下是一个示例:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> myVector;

    myVector.push_back(1);
    myVector.push_back(2);
    myVector.push_back(3);

    for (int i = 0; i < myVector.size(); i++) {
        std::cout << myVector[i] << " ";
    }

    return 0;
}

输出将是:1 2 3。通过调用push_back()方法,可以在向量的末尾添加新元素。

链表

可以使用自定义的链表类来实现链表。要在链表的末尾添加新元素,需要创建一个新节点,将新节点添加到链表的最后一个节点的next指针上。以下是一个示例:

#include <iostream>

class Node {
public:
    int data;
    Node* next;

    Node(int value) {
        data = value;
        next = nullptr;
    }
};

class LinkedList {
public:
    Node* head;

    LinkedList() {
        head = nullptr;
    }

    void addNode(int value) {
        Node* newNode = new Node(value);

        if (head == nullptr) {
            head = newNode;
        } else {
            Node* currentNode = head;

            while (currentNode->next != nullptr) {
                currentNode = currentNode->next;
            }

            currentNode->next = newNode;
        }
    }
};

int main() {
    LinkedList myLinkedList;

    myLinkedList.addNode(1);
    myLinkedList.addNode(2);
    myLinkedList.addNode(3);

    Node* currentNode = myLinkedList.head;

    while (currentNode != nullptr) {
        std::cout << currentNode->data << " ";
        currentNode = currentNode->next;
    }

    return 0;
}

输出将是:1 2 3。通过创建一个新节点并将其添加到链表的最后一个节点的next指针上,可以在链表的末尾添加新元素。

删除元素
数组

要从数组中删除元素,可以使用erase()方法。该方法需要一个迭代器作为参数,指定要删除的元素的位置。以下是一个示例:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> myVector {1, 2, 3, 4, 5};

    // 删除第三个元素
    myVector.erase(myVector.begin() + 2);

    for (int i = 0; i < myVector.size(); i++) {
        std::cout << myVector[i] << " ";
    }

    return 0;
}

输出将是:1 2 4 5。通过调用erase()方法并传递要删除的元素位置的迭代器,可以从数组中删除元素。

链表

要从链表中删除元素,需要找到要删除的节点,并将其从链表中移除。以下是一个示例:

#include <iostream>

class Node {
public:
    int data;
    Node* next;

    Node(int value) {
        data = value;
        next = nullptr;
    }
};

class LinkedList {
public:
    Node* head;

    LinkedList() {
        head = nullptr;
    }

    void addNode(int value) {
        Node* newNode = new Node(value);

        if (head == nullptr) {
            head = newNode;
        } else {
            Node* currentNode = head;

            while (currentNode->next != nullptr) {
                currentNode = currentNode->next;
            }

            currentNode->next = newNode;
        }
    }

    void deleteNode(int value) {
        Node* currentNode = head;
        Node* previousNode = nullptr;

        while (currentNode != nullptr && currentNode->data != value) {
            previousNode = currentNode;
            currentNode = currentNode->next;
        }

        if (currentNode == nullptr) {
            std::cout << "Node not found." << std::endl;
            return;
        }

        if (previousNode == nullptr) {
            head = currentNode->next;
        } else {
            previousNode->next = currentNode->next;
        }

        delete currentNode;
    }
};

int main() {
    LinkedList myLinkedList;

    myLinkedList.addNode(1);
    myLinkedList.addNode(2);
    myLinkedList.addNode(3);

    myLinkedList.deleteNode(2);

    Node* currentNode = myLinkedList.head;

    while (currentNode != nullptr) {
        std::cout << currentNode->data << " ";
        currentNode = currentNode->next;
    }

    return 0;
}

输出将是:1 3。通过找到要删除的节点,并将其从链表中移除,可以从链表中删除元素。

以上是如何在C++中新增和删除元素的介绍。无论是数组还是链表,您都可以根据需要选择适合的数据结构来实现。希望本文对您有所帮助!