在C++中,数组是一种固定大小的连续内存块,因此在数组中间插入元素并不是一个直接的操作。数组的大小在声明时就已经确定,并且不能改变。如果你需要在数组中间插入元素,通常有以下几种方法:
std::vector
)std::vector
是 C++ 标准库中的一个动态数组容器,它可以动态调整大小。你可以使用 insert
方法在指定位置插入元素。
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
int newElement = 6;
// 在索引 2 的位置插入新元素
vec.insert(vec.begin() + 2, newElement);
// 输出结果
for (int num : vec) {
std::cout << num << " ";
}
return 0;
}
输出结果将是:
1 2 6 3 4 5
如果你坚持使用原始数组,你可以手动移动元素来腾出空间,然后插入新元素。但这需要额外的代码,并且容易出错。
#include <iostream>
void insertElement(int arr[], int size, int index, int newElement) {
// 创建一个临时数组
int temp[size + 1];
// 复制前半部分元素
for (int i = 0; i < index; ++i) {
temp[i] = arr[i];
}
// 插入新元素
temp[index] = newElement;
// 复制后半部分元素
for (int i = index; i < size; ++i) {
temp[i + 1] = arr[i];
}
// 将临时数组复制回原数组
for (int i = 0; i < size + 1; ++i) {
arr[i] = temp[i];
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(arr[0]);
int newElement = 6;
int index = 2;
insertElement(arr, size, index, newElement);
// 输出结果
for (int i = 0; i < size + 1; ++i) {
std::cout << arr[i] << " ";
}
return 0;
}
输出结果将是:
1 2 6 3 4 5
如果你需要频繁地在中间插入元素,使用链表可能是一个更好的选择。链表的节点可以动态分配,并且插入操作的时间复杂度是 O(1)。
#include <iostream>
struct Node {
int data;
Node* next;
};
void insertNode(Node*& head, int index, int newElement) {
Node* newNode = new Node{newElement, nullptr};
if (index == 0) {
newNode->next = head;
head = newNode;
return;
}
Node* current = head;
for (int i = 0; i < index - 1 && current != nullptr; ++i) {
current = current->next;
}
if (current != nullptr) {
newNode->next = current->next;
current->next = newNode;
}
}
void printList(Node* head) {
Node* current = head;
while (current != nullptr) {
std::cout << current->data << " ";
current = current->next;
}
std::cout << std::endl;
}
int main() {
Node* head = new Node{1, new Node{2, new Node{3, new Node{4, new Node{5, nullptr}}}}};
int newElement = 6;
int index = 2;
insertNode(head, index, newElement);
printList(head);
return 0;
}
输出结果将是:
1 2 6 3 4 5
std::vector
:最简单和推荐的方法,适用于大多数情况。选择哪种方法取决于你的具体需求和应用场景。
领取专属 10元无门槛券
手把手带您无忧上云