如何通过在c ++中使用指针指向将数组元素从一列移到另一列 当我这样做时,它说“必须调用对非静态成员函数的引用”
for (int i = 0; i < size; i++)
{
array[n]->my_data[i] = array[n]->my_arr[i+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);
}