C++ 数组插入l值,r值
这只是出于好奇,而我正在练习数组插入的乐趣。 问题是在下面的代码中,为什么C++ 数组插入l值,r值,c++,arrays,C++,Arrays,这只是出于好奇,而我正在练习数组插入的乐趣。 问题是在下面的代码中,为什么a[i]=a[i+1]给我一些垃圾值,但将其设置为a[i+1]=a[i]解决了这个问题。从逻辑上讲,它们是一样的,但我只是想知道它是否与l值和r值引用有关 #include<iostream> #include<array> using namespace std; int main() { int pos,value; std::array<int,10
a[i]=a[i+1]
给我一些垃圾值,但将其设置为a[i+1]=a[i]
解决了这个问题。从逻辑上讲,它们是一样的,但我只是想知道它是否与l值和r值引用有关
#include<iostream>
#include<array>
using namespace std;
int main()
{
int pos,value;
std::array<int,10> arr{1,2,3,4,5,6,7,8,9};
for (int i:arr){
cout<<i<<" ";
}
std::cout<<"\n";
cin>>value>>pos;
for(int i=arr.size()-1;i>=pos;i--){
arr[i]=arr[i+1];
}
arr[pos]=value;
for (int i:arr){
cout<<i<<" ";
}
}
#包括
#包括
使用名称空间std;
int main()
{
int pos,value;
数组arr{1,2,3,4,5,6,7,8,9};
用于(int i:arr){
coutNo,它与l值和r值引用无关
这里,在第一次迭代中,arr[i+1]
超出了范围。另外,由于您进行了编辑,arr[i]
也将超出范围
for(int i=arr.size();i>=pos;i--){
arr[i]=arr[i+1];
}
< C++ >代码> > siz()/<代码>返回元素的数量。记住,在C++中,索引从“代码> 0”/代码>开始,因此最后一个值的索引总是“代码> ARR.siz())-1 < /C> > /P>
“从逻辑上讲,他们也是这样做的”
否-第一个版本使用相同的数字(数组中的最后一个)填充数组的受影响部分。第二个版本向上洗牌数字,为值
留出空间
用笔和纸手动循环,您将看到第一个版本将相同的值向下复制,直到pos
您还可以通过访问arr
越界来启动这两个循环,这使得两个版本都具有未定义的行为
我怀疑您希望版本向上移动数字:
for(int i=arr.size()-2; i>=pos; --i) { // -2 since i+1 must be less than size()
arr[i+1]=arr[i];
}
arr[i+1]
超出了i=arr.size()-1
的范围。您的“修复”可以写入数组的边界之外,您只是看不到终端打印输出中的错误。@sweenish我不明白您的意思,兄弟,现在我已经编辑了代码。现在可以了吗???@MikeCAT现在已经修复了这两个代码片段之间没有区别(除了一个空行)和a[i+1]=a[i]
在它们中都没有使用。
for(int i=arr.size()-2; i>=pos; --i) { // -2 since i+1 must be less than size()
arr[i+1]=arr[i];
}