我有2个浮点数组。键盘上有一个K变量读数。我必须在K的值之后插入第一个数组中第二个数组的元素。例如:
阵列1(7个元素):1,2,3,4,5,6,7 数组2(3个元素):9,10,11
假设K = 4
数组1变为:1,2,3,4,9,10,11,5,6,7(每个数组一次K个元素)
如何将元素向右移动(在数组1中)以插入数组2的元素(并重复该过程)?我宁愿避免使用任何C ++ 11数组函数(转换,排序等)
答案 0 :(得分:1)
因为它听起来像是家庭作业,所以我只给你一些关于解决方案的提示,没有完整的代码。
将任务分为两个子任务:将第一个数组中的元素向右移动一些偏移量(要插入的元素数量,即第二个列表的长度),以及将元素从第二个数组移动到您移动元素的第一个数组。 不要为插入的每个元素重复此过程,而是按第二个数组的(已知)大小移动元素。这应该比你描述的要快。
为了避免需要临时副本(因此它可以“就地”,并且在您的评论中,您说不允许分配第三个(临时)数组),您必须开始从结束。这可以确保您不会覆盖以后需要的值,如果您开始从左侧移动元素,就会出现这种情况。
假设要在第一个数组中移动的部分从某个索引start
开始(在您的问题中,这是K
我猜)并且整个数组的长度为end
(即end
是元素“一个接一个结束”的索引。)
编写一个循环,遍历第一个数组中的源索引(即读取旧值的位置)。将它们移动到第一个数组中的偏移量。请注意,如上所述,此循环向后迭代 ,即您需要for (int index = end-1; index >= start; --index)
之类的内容。此循环从最后一个元素(end-1
开始;请注意end
是长度,因此在数组之后指向)并在start
结束(包含)。
将元素向右移动后,您可以开始将元素从第二个数组移动到第一个数组。这里的顺序无关紧要,所以为了简单起见,我更倾向于向前迭代。
正如下面讨论的那样,我假设已经在数组1中分配了足够的空间。请确保代码中已经存在这种情况。由于您不允许分配第三个数组,因此没有其他选项。 (除非允许您以动态大小的数据结构形式使用自动分配,例如std::vector
)
答案 1 :(得分:-1)
我的回答可能无法准确回答您的问题。但是当你使用c ++而不是c时,你应该使用向量而不是数组。
vector<int> vec1{1, 2, 3, 4, 5, 6, 7};
vector<int> vec2{9, 10, 11};
vec1.insert(vec1.begin()+k,vec2.begin(),vec2.end());
这足以满足您的所有需求;