如何使用c ++中的指针将数组元素从一列移到另一列

时间:2018-02-26 03:56:28

标签: c++ arrays pointers

如何通过在c ++中使用指针指向将数组元素从一列移到另一列 当我这样做时,它说“必须调用对非静态成员函数的引用”

    for (int i = 0; i < size; i++)
    {
        array[n]->my_data[i] = array[n]->my_arr[i+1];
    }

1 个答案:

答案 0 :(得分:1)

以下是一些C ++方法。使用std::rotate的第二个是首选。

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

void show(const std::vector<int> & vec) {
    for (auto v : vec) {
        std::cout << v << " ";
    }
    std::cout << '\n';
}
int main() {
    std::vector<int> vec{ 0,1,2,3,4,5,6,7,8,9 };

    // Re-invent wheel
    for (auto it = vec.begin() + 1; it != vec.end(); ++it) {
        *(it - 1) = std::move(*it);
    }
    vec.pop_back();
    show(vec);

    // No wheel re-invention
    std::rotate(vec.begin(), vec.begin() + 1, vec.end());
    vec.pop_back();
    show(vec);
}

如果要在堆栈上使用固定大小的数组,这就是方法。不使用 array int[10];

#include <algorithm>
#include <array>
#include <string>
#include <iostream>

const int sz = 5;
void show(const std::array<std::string, sz> & vec) {
    for (auto v : vec) {
        std::cout << v << " ";
    }
    std::cout << '\n';
}
int main() {
    std::array<std::string, sz> vec{ "zero", "one", "two", "three", "four" };

    // Roll your own
    for (auto it = vec.begin() + 1; it != vec.end(); ++it) {
        std::swap(*(it - 1), *it);
    }
    show(vec);

    // No wheel re-invention
    std::rotate(vec.begin(), vec.begin() + 1, vec.end());

    show(vec);
}