Я написал небольшую программу, которая генерирует уникальные случайные числа. Сначала я написал его, используя то, что знаю, массив, чтобы загрузить и распечатать числа. Я пытаюсь заменить массив на вектор, поэтому, если я хочу сделать копии списка, я могу сделать это проще. Я получаю сообщение об ошибке.Использование векторов вместо массивов
error: cannot convert 'std::vector<int>' to "std::vector<int>*' for argument '1' to bool numInList(std::vector<int>*, int)'
Эта ошибка возникает, когда я вызываю функцию numInList.
Я новичок в использовании векторов, но я думал, что вы можете использовать векторы, такие как массивы, с преимуществами встроенных функций, без фиксированного размера и возможностью копирования одного вектора в другой вектор.
вот мой код:
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <cstdlib>
#include <ctime>
using namespace std;
bool numInList(vector <int> randNumbers[], int num);
const int length = 100;
int main()
{
int countCheck = 0;
vector <int> randNumbers(length);
vector <int> newlist();
srand(time(0));
while(countCheck < length){
int num = rand() % 90000 +10000;
if (!numInList(randNumbers, num)){
randNumbers[countCheck] = num;
cout << "The Random Number " << randNumbers[countCheck] << endl;
countCheck++;
}
}
cout << "\n\n\n";
newlist[] = randNumbers[];
return 0;
}
bool numInList(vector<int> randNumbers[], int num){
for (int index = 0; index < length; index++){
if (randNumbers[index] == num){
return true;
}
}
return false;
}
Я попытался де-реферирование в надежде, что позволит решить проблему
if (!numInList(&randNumbers, num))
тогда я получаю сообщение об ошибке в операторе IF в функции numInList
error: ISO C++ forbids comparisons between pointers and integer [f-permissive]
Любая помощь была бы принята с благодарностью.
Я изменил несколько вещей, теперь я не получаю ошибку компиляции, но сбои программы при выполнении ... какие-либо предложения ???
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <cstdlib>
#include <ctime>
using namespace std;
bool numInList(vector <int> randNumbers, int num);
const int length = 100;
int main()
{
int countCheck = 0;
vector <int> randNumbers;
vector <int> newlist;
srand(time(0));
while(countCheck < length){
int num = rand() % 90000 +10000;
if (!numInList(randNumbers, num)){
randNumbers.push_back(num);
cout << "The Random Number " << randNumbers[countCheck] << endl;
countCheck++;
}
}
cout << "\n\n\n";
newlist = randNumbers;
return 0;
}
bool numInList(vector<int> randNumbers, int num){
for (int index = 0; index < length; index++){
if (randNumbers[index] == num){
return true;
}
}
return false;
}
'вектор randNumbers []' 'объявляет randNumbers' как массив ** из ** векторы. Или фактически, как указатель на вектор, поскольку это аргумент функции. Также 'newlist [] = randNumbers []' должен быть просто 'newlist = randNumbers'. –
emlai
Zenith, как бы вы объявили вектор правильно? Я попытался удалить скобки [], но я получил ту же ошибку. – bryan
@bryan, Сделайте это в определении * и * функции. – chris