如何安全地将元素插入数组C 中
How to safely insert an element into an array c++?
我有一个简单的程序来添加一个元素:
void printArray(int inp[], int size)
{
cout << "[";
for (int i = 0; i < size - 1; i++)
{
cout << inp[i] << ", ";
}
cout << inp[size - 1] << "]" << endl;
}
int addElement(int inputArray[], int inputSize, int element, int atIndex)
{
int cur = inputSize;
while (cur >= 0)
{
if (cur == atIndex)
{
inputArray[cur] = element;
return inputSize + 1;
}
inputArray[cur] = inputArray[cur - 1];
cur--;
}
return inputSize + 1;
}
int arr1[] = {1, 5, 9, 2};
int arr2[] = {1, 5, 9, 2};
int main()
{
int arraySize = sizeof(arr1) / sizeof(arr1[0]);
addElement(arr1, arraySize, 7, 0);
printArray(arr1, arraySize + 1);
printArray(arr2, arraySize);
return 0;
}
此输出:
[7,1,5,9,2]
[2,5,9,2]
即使我还没有触摸 arr2
,也经过了修改。我认为,因为arr1
和arr2
在内存中分配了连续分配,并且天真地将元素添加到arr1
覆盖arr2[0]
。
我应该如何处理这种情况并仅在未使用下一个空间时添加,否则将整个数组移至另一个位置?
您可以使用std::vector
轻松实现此目标。它具有一种称为insert
的方法,您只需通过一个位置和一个数字作为参数,它将单独处理重新分配。
例如:如果写:
vector<int> vec = { 1, 2, 3, 4, 5 };
vec.insert(vec.begin() + 2, 100);
现在,您的向量中的元素为1、2、100、3、4、5。
我不知道这是否对您有帮助,但是您也可以一次添加多个元素:
vector<int> vec = { 1, 2, 3, 4, 5 };
vec.insert(vec.begin() + 3, { 100, 101 });
现在您的向量中的元素是: 1, 2, 3, 100, 101, 4, 5
。
您可以看到,第一个参数是第一个插入元素的位置,第二个参数是要插入的元素或元素列表。
您可以在此处阅读有关std::vector
的更多信息,以及有关std::vector::insert
的信息
希望这会有所帮助。
作为@storyteller提到的评论,您可以使用std :: vector。
,但是您必须选择要使用的容器的哪个功能,有两种类型。
- 在容器。这是基于迭代器的。
:: push_back ,插入容器的背面/最后一个
您可以根据自己的目的使用其中的任何一个,只需确保 :: insert 您指向正确的位置(Wise)。
另外,从C 11开始,您可以使用 :: EMPLECE 和 :: EMPLECE_BACK ,该可以构建和插入数据。您可以在
上找到更多http://www.cplusplus.com/reference/Vector/Vector/
希望这会有所帮助。
我有一个简单的程序,可以在数组中添加一个元素:
不可能。阵列的大小在编译时固定。换句话说,
int arr1[] = {1, 5, 9, 2};
很像:
int arr1_1 = 1;
int arr1_2 = 5;
int arr1_3 = 9;
int arr1_4 = 2;
我认为,对于学习目的,查看这样的阵列是有帮助的,而不像一个可以在程序运行时缩小和增长的容器。在运行时添加元素就像要求在运行时添加变量一样。C 数组无法正常工作。
you can 使用new[]
在运行时设置数组的初始大小,但即使如此,您也无法"添加"任何内容。实际上,不要使用new[]
,
访问cppreference.com,了解std::vector
,然后从头开始重新学习所有内容。从页面底部的示例代码开始。
- 如何在向量数组中插入元素?
- 有没有更快的方法可以在 std::vector 中插入元素
- 映射C++按值排序和插入元素
- 如何在一对集合的向量中插入元素?vector<pair<int,set<string>>>
- 当索引位于末尾和空数组时,向数组插入元素时出现问题
- 在 QSet 中插入元素<QString>并检索 ,删除 QSet 的最后一项
- C++ 在列表末尾插入元素的列表的 STL 向量
- 插入元素后矢量容量增加
- 如何在 c++ 集中插入元素,直到按下 Enter 键
- C++向量插入元素
- 有没有办法在unordered_map的某个位置插入元素
- 重新插入元素可以"re-validate"迭代器吗?
- 内部源代码 - 在链接列表实现中插入元素上的删除会破坏整个应用程序
- 在链表中插入元素
- stl 中是否有任何数据结构可以在 O(1) 或 O(log n) 中插入元素,我可以在其上编写自己的bin_searc
- 如何在将数据结构插入元素后继续迭代数据结构
- 有没有一种方法可以在std::向量的特定位置重复插入元素
- 在向量 (C++) 中保留插入元素的地址
- 插入元素后Unordered_map变空,我做错了什么
- 循环a std :: unordered_map,序列始终是i插入元素的序列