Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+中的数组插入+;_C++_Arrays_Shift_Operation - Fatal编程技术网

C++ C+中的数组插入+;

C++ C+中的数组插入+;,c++,arrays,shift,operation,C++,Arrays,Shift,Operation,我有两个浮点数组。键盘上有一个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数组函数(变换、排序等),因为它听起来像是家庭作业,我只给你一些关于解决方案的提示,没有完整的代码。 将任务分为两个子任务

我有两个浮点数组。键盘上有一个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数组函数(变换、排序等)

,因为它听起来像是家庭作业,我只给你一些关于解决方案的提示,没有完整的代码。 将任务分为两个子任务:将第一个数组中的元素向右移动一定的偏移量(要插入的元素数量,即第二个列表的长度),以及将元素从第二个数组移动到第一个数组中,在第一个数组中移动元素。不要对插入的每个元素重复此过程,而是按第二个数组的(已知)大小移动元素。这应该比您描述的要快

为了避免需要临时副本(这样它就可以“就位”,并且在您的评论中您说不允许分配第三个(临时)数组),您必须从末尾开始移动元素。这可以确保您不会覆盖以后需要的值,如果您开始从左侧移动元素,情况就是这样

假设第一个数组中要移动的部分从某个索引
start
(在您的问题中,我猜这是
K
)开始,整个数组有长度
end
(即
end
是元素“一过终点”的索引)

编写一个循环,循环遍历第一个数组中的源索引(即读取旧值的位置)。按第一个数组中的偏移量移动它们。请注意,如上所述,此循环向后迭代,也就是说,您需要类似(int index=end-1;index>=start;--index)的东西。此循环从最后一个元素(
end-1
;注意
end
是长度,因此指向数组之后)开始,并在
start
结束(包括)

将元素向右移动后,可以开始将元素从第二个数组移动到第一个数组。在这里,顺序并不重要,因此为了简单起见,我更喜欢向前迭代


正如下面这个答案所讨论的,我假设数组1中已经分配了足够的空间。请确保您的代码中是这种情况。由于不允许分配第三个数组,因此除了此选项之外,没有其他选项。(除非允许您使用动态大小数据结构形式的自动分配,如
std::vector

我的答案可能无法准确回答您的问题。但是,当你使用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());
vec1{1,2,3,4,5,6,7};
向量vec2{9,10,11};
vec1.insert(vec1.begin()+k,vec2.begin(),vec2.end());

这正好满足你所有的需要

听起来像是家庭作业。是否允许创建一个新数组作为结果返回?(如果您寻求帮助,最好发布您编写的初始代码)是否允许使用
std::vector
s或简单的C数组?
std::sort
std::transform
以及许多其他算法都是C++98中的算法,所以在。很多都可以在C数组上工作。也许你的意思是,出于某种原因,你必须/想要重新发明轮子。如果不允许使用临时数组,另一个问题是大小。在他的示例中,数组1变大。如果没有新阵列,则必须在阵列1之后分配更多空间。如果这真的是家庭作业,任务听起来更像是应该使用向量。我假设已经分配了足够的空间。如果没有,这是另一个可以单独执行的任务。lol在开始考虑其他任务之前,你必须先考虑它
除了这个
没有其他选择这不太正确,可以使用
malloc
,基本上是相同的
std::vector
does@Paranaix我想这就是老师的意思“没有第三个数组”。OP明确表示他必须使用数组。可怜的OP不允许使用它,因此这不是一个有效的答案(虽然它是“更好”)。@leemes我应该删除我的答案。我认为这是一个更好的选择。