我有一个简单的程序来向数组添加元素:
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]
。
如何处理这种情况并仅在下一个空格未使用时添加,否则将整个阵列移动到另一个位置?
答案 0 :(得分: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
here和std::vector::insert
here
希望这会有所帮助。
答案 1 :(得分:0)
正如@StoryTeller提到的评论,您可以使用std :: vector。
但是你必须选择你想要使用的容器的哪个功能,有两种类型。
:: insert ,在数据中的特定位置插入数据 容器。这是基于迭代器的。
:: push_back ,插入容器的后面/末尾
您可以根据自己的目的使用其中任何一个,只需确保 :: insert 指向正确的位置(明智的迭代器)。
此外,从C ++ 11开始,您可以使用 :: emplace 和 :: emplace_back 来构建和插入数据。您可以在
找到更多信息http://www.cplusplus.com/reference/vector/vector/
希望这有帮助。
答案 2 :(得分:0)
我有一个简单的程序来向数组添加元素:
不可能。数组的大小在编译时是固定的。换句话说,
int arr1[] = {1, 5, 9, 2};
很像:
int arr1_1 = 1;
int arr1_2 = 5;
int arr1_3 = 9;
int arr1_4 = 2;
我认为,出于学习目的,查看这样的数组是有帮助的,而不是像程序运行时可以缩小和增长的容器一样。在运行时向数组添加元素就像要求在运行时添加变量一样。 C ++数组不会那样工作。
您可以使用new[]
在运行时设置数组的初始大小,但即使这样,您也无法添加&#34;任何东西。事实上,永远不要使用new[]
。
访问cppreference.com,了解std::vector
并从头开始重新学习所有内容。从页面底部的示例代码开始。