История изменений
Исправление Aswed, (текущая версия) :
#include <vector>
#include <iostream>
using namespace std;
void moveToB(vector<void*> &a, vector<void*> &b) {
int n;
cin >> n;
for(int i=0; i<n; ++i) {
b.push_back(a.back());
a.pop_back();
}
}
int main(){
vector<void*> a;
vector<void*> b;
int n;
cin >> n;
a.push_back((void*)&b);
for(int i=0; i<n; ++i){
a.push_back(NULL);
}
moveToB(a,b);
return 0;
}
Циклическая ссылка может возникнуть, а может и не возникнуть. Зависит только от рантайма. Возможны и более сложные случаи, когда a -> b -> c -> a. Это нельзя гарантированно отловить на этапе компиляции. Только если очень сильно урезать возможности программиста, что бы не допустить никакой возможности создания цикла. Но в таком случае ты даже двусвязный список не реализуешь.
Исправление Aswed, :
#include <vector>
#include <iostream>
using namespace std;
void moveToB(vector<void*> &a, vector<void*> &b) {
int n;
cin >> n;
for(int i=0; i<n; ++i) {
b.push_back(a.back());
a.pop_back();
}
}
int main(){
vector<void*> a;
vector<void*> b;
int n;
cin >> n;
a.push_back((void*)&b);
for(int i=0; i<n; ++i){
a.push_back(NULL);
}
moveToB(a,b);
return 0;
}
Циклическая ссылка может возникнуть, а может и не возникнуть. Зависит только от рантайма. Возможны и более сложные случаи, когда a -> b -> c -> a. Это нельзя гарантированно отловить на этапе компиляции. Только если очень сильно урезать возможности программиста, что бы не допустить никакой возможности создания цикла. Но в таком случае, ты даже двусвязный список не реализуешь.
Исходная версия Aswed, :
#include <vector>
#include <iostream>
using namespace std;
void moveToB(vector<void*> &a, vector<void*> &b) {
int n;
cin >> n;
for(int i=0; i<n; ++i) {
b.push_back(a.back());
a.pop_back();
}
}
int main(){
vector<void*> a;
vector<void*> b;
int n;
cin >> n;
a.push_back((void*)&b);
for(int i=0; i<n; ++i){
a.push_back(NULL);
}
moveToB(a,b);
return 0;
}
Циклическая ссылка может возникнуть, а может и не возникнуть. Зависит только от рантайма. Возможны и более сложные случаи, когда a -> b -> c -> a. Это нельзя гарантированно отловить на этапе компиляции. Только если очень сильно урезать возможности программиста, что бы не допустить никакой возможности создания цикла.