C++ 如何在C++;

C++ 如何在C++;,c++,c,arrays,visual-c++,C++,C,Arrays,Visual C++,第一个问题,我这里有一个数组: arr[] = {1; 2; 3; 4; 5} 如果我输入例如:3 第三个元素将被删除并替换为下一个值。 像这样: arr[] = {1; 2; 4; 5} 我在这里得到了这个代码: for(int i = 2; i < n; i++) { arr[i] = arr[i + 1]; arr[n - 1] = 0; } 请修改代码 第二个问题, 我也会输入“3”,但不是删除第三个元素并替换它,而是插入新的第三个元素,即“50”,以便: 将

第一个问题,我这里有一个数组:

arr[] = {1; 2; 3; 4; 5}
如果我输入例如:3 第三个元素将被删除并替换为下一个值。 像这样:

arr[] = {1; 2; 4; 5}
我在这里得到了这个代码:

for(int i = 2; i < n; i++)
{
    arr[i] = arr[i + 1];
    arr[n - 1] = 0;
}
请修改代码

第二个问题, 我也会输入“3”,但不是删除第三个元素并替换它,而是插入新的第三个元素,即“50”,以便:

将成为:

arr[] = {1; 2; 50; 3; 4; 5}
在编程和C++中,我仍然是NoOB,这是我的第一个问题,所以请回答得好:d


非常感谢

否,该元素将永远不会被“删除”。数组大小在编译时确定,并且将是固定的

如果您需要在运行时调整数组大小,请考虑使用它。

移动< /P>

arr[n - 1] = 0; 
循环后得到1;2.4.5.0:

for(int i = 2; i < n - 1; i++)
    arr[i] = arr[i + 1];
arr[n - 1] = 0; 
for(inti=2;i
arr[]={1;2;3;4;5}
将分配足够的内存来容纳5个(不少于,不多于)整数值

当您在代码中移动元素时,您正是在进行这种移动。这些操作不会释放或添加“内存”

如果由于此类插入/删除操作而确实需要更改数组的大小,则必须分配一个大小合适的新数组,并将数据从旧数组复制到新数组中(如果合适,请记住释放第一个数组不再使用的内存)

欢迎来到C++,其中一个工程师<强>负责管理资源(不同于许多脚本或其他高级语言)。


旁注:当您的第一个代码正在移动元素并在该内存块的末尾留下一个未使用的“尾巴”时,第二个示例将访问分配给该数组的内存块之外的内存,从而导致内存访问冲突(并且极有可能由任何体面的操作系统终止您的程序)

如果您使用C++,则标准模板库中的容器可供您使用。代码示例中使用的数组是C样式的数组。虽然在C++代码中使用C样式数组是完全可以接受的,但是使用Std::vector会更好,因为它允许在运行时调整数组的大小方面有更大的灵活性。在大多数COSE中,C样式数组和std::vector之间的性能差异可以忽略不计。

第一个问题中的问题是,在for循环的每次迭代中,您都将数组的最后一个元素设置为0,因此在循环的第一次通过之后,它将是
{1,2,4,4,0}
,接下来是
{1,2,4,0,0}

简单地说,
arr[n-1]=0超出for循环就足够了。同样:
编辑:更新了循环控制语句,所以它不会越界,谢谢hmjd

for(int i = 2; i < n-1; i++) 
{
    arr[i] = arr[i + 1];   
}
arr[n - 1] = 0;
为了简洁起见,省略了分配检查。
对于第一个问题,可以使用类似的方法来更改数组的大小。

使用向量

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

template<typename T>
void print(const vector<T> &v){
    typename vector<T>::const_iterator it;
    for(it=v.begin(); it!=v.end(); ++it)
        cout << *it << ' ';
    cout << endl;
}

int main (){
    const int arr[] = {1, 2, 3, 4, 5};
    const int size = sizeof(arr)/sizeof(int);

    vector<int> v(&arr[0], &arr[size]);

    v.erase(v.begin() + 2);
    print(v);//1 2 4 5

    v.insert(v.begin()+2, 3);
    print(v);//1 2 3 4 5
    v.insert(v.begin()+2, 50);
    print(v);//1 2 50 3 4 5
}
#包括
#包括
#包括
使用名称空间std;
模板
无效打印(常量向量和v){
typename向量::const_迭代器;
for(it=v.begin();it!=v.end();+it)

CUT

使用标准C++库函数插入或删除数组元素并调整大小。 用于在数组中插入元素


< >在代码< >代码> i=n=1 < <代码> > <代码> ARR[i]=ARR [i+3];< /Calp>C和C++是两种不同语言,这是这个问题,也请注意,您的代码示例既不是有效的C也不是C++。
for(int i = 2; i < n-1; i++) 
{
    arr[i] = arr[i + 1];   
}
arr[n - 1] = 0;
int size = 4;
int arr[] = (int *) calloc(size, sizeof(int));
int insertTo = 2;
int insert = 50;
int tempArr[] = (int *) calloc(size+1, sizeof(int));
for(int i = 0, int j = 0; i < size; i++, j++) {
    if(j == insertTo) {
        tempArr[j] = insert;
        i--; //to offset the cycle incrementation
    } else {
        tempArr[j] = arr[i];
    }
}
free(arr);
arr = tempArr;
size++; // Don't forget to update the size
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

template<typename T>
void print(const vector<T> &v){
    typename vector<T>::const_iterator it;
    for(it=v.begin(); it!=v.end(); ++it)
        cout << *it << ' ';
    cout << endl;
}

int main (){
    const int arr[] = {1, 2, 3, 4, 5};
    const int size = sizeof(arr)/sizeof(int);

    vector<int> v(&arr[0], &arr[size]);

    v.erase(v.begin() + 2);
    print(v);//1 2 4 5

    v.insert(v.begin()+2, 3);
    print(v);//1 2 3 4 5
    v.insert(v.begin()+2, 50);
    print(v);//1 2 50 3 4 5
}