c++ - 插入到数组的所需元素中,并在 C++ 中将所有其他元素推到一个位置

标签 c++ arrays

我正在为家庭作业处理的一个小函数有一些问题。

我的静态数组大小为 20 (shelfSize),但是,我最多只需要使用 10 个元素。所以我不必担心越界等问题(整个 20 数组都初始化为 0)。

我要做的是将一个整数 booknum 插入到它作为输入接收的数组的元素中。

这是我目前的逻辑:

void insert_at(int booknum, int element){
for(int i=element+1; i < shelfSize; i++)
    bookshelf[i+1]=bookshelf[i]
bookshelf[element]=booknum;
}

假设我有这个数组:

[5,4,3,1,7]

我想在元素 1 处插入一个 8 并将数组变为:

[5,8,4,3,1,7]

从技术上讲,最后一个元素 7 之后的所有内容都是 0,但是,我有一个单独的打印函数,它只打印特定元素。

无论我拿笔和纸多少次手动写出我的逻辑,我都无法让它工作。

如有任何帮助,我们将不胜感激。

最佳答案

你应该从数组的末尾开始,这应该适合你:

void insert_at(int booknum, int element)
{
    for (int i = shelfsize-1;i>element;i--)
        bookshelf[i] = bookshelf[i-1];
    bookshelf[element] = booknum;
}

我还建议您习惯于处理非法值,例如,如果用户输入 21 怎么办?

优化后的代码是:

bool insert_at(int booknum, int element)
{
    if (element>=shelfsize-1)
        return false;
    for (int i = shelfsize-2;i>element;i--)
        bookshelf[i] = bookshelf[i-1];
    bookshelf[element] = booknum;
    return true;
}

关于c++ - 插入到数组的所需元素中,并在 C++ 中将所有其他元素推到一个位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6448638/

相关文章:

python - 将多个不同长度的时间序列合并成一个二维矩阵

c++ - 将文字分配给指针

c++ - 如何在 QWebEngineView 中模拟 linkClicked(QUrl) 信号?

javascript - 将数组中的多个元素移动到数组中的某个索引

php - 使用 PDO fetch 获取数组并使用 if 语句

python - 从查找表中插入数据

c++ 无法将指针数组初始化为 null c++

c++ - 配置cmake以根据环境选择编译器

c++ - Boost::Python 前向声明 boost::python::object 抛出 python TypeError

javascript - JS过滤数组内的数组