Из одного массива выбрать элементы, которые войдут в другой массив

  • Автор темы Masters
  • Дата начала
Статус
Закрыто для дальнейших ответов.
M

Masters

Гость
#1
Код:
double arr1[9] = {2,4,1,6,4,8,9,2,7};
for (int i=0;i<9;i++)
{
if (arr1[i] > 5)
{

//?????

}
}
Помогите, есть массив arr1 из девяти элементов, нужно из него выкинуть все значение меньше 5, и сформировать новый массив arr2 из оставшихся чисел. Размерность нового массива неизвестна.
 
Z

ZZmiy

Гость
#2
Как вариант - сделать это в два прохода - вначале посчитать количество таких элементов, затем выделить нужное количество памяти и сформировать массив
Или использовать стандартные контейнеры :(
 
M

Mashusik

Гость
#3
Тут нужно сформировать цикл, который будет проверять каждый элемент массива arr1 и заодно создавать новый массив с уже отобранными числами, сдесь же вводишь переменную, которая будет подсчитывать колличесво элементов нового массива. И все! Все очень просто!
 
M

Masters

Гость
#4
Код:
#include <iostream>
#include <vector>
int main ()
{
int z=0;
std::vector<int> arr2(z);

double arr1[9] = {2,4,1,6,4,8,9,2,7};
for (int i=0;i<9;i++)
{
if (arr1[i] > 5)
{
arr2.resize(z+1);
arr2[z] = arr1[i];
std::cout << arr2[z]<<"\n";
z++;
}
}
std::cout << "size of arr2: "<<arr2.size();
}
Нагуглил вот так, вроде проще и строк меньше, совет в 2 прохода тоже не плох.
> заодно создавать новый массив с уже отобранными числами
Нельзя создать массив если не известна его размерность.
 
A

alexsid

Гость
#5
ишо меньше строк,
ишо проще

Код:
#include <vector>
#include <iostream>
#include <algorithm>
#include <iterator>


void main(){
double arr1[9] = {2,4,1,6,4,8,9,2,7}

std::vector<double> result;
std::copy_if (arr1, arr1 + 9, std::back_inserter(result), std::bind2nd (std::greater<int>(),5));
std::copy(result.begin(), result.end(), std::ostreambuf_iterator<double>(std::cout));
}
да че там
Код:
#include <iostream>
#include <algorithm>
#include <iterator>

void main()
{
std::copy_if (std::istream_iterator<double>(std::cin),		 // копируем пользовательский ввод (массив вещ.чисел через пробел)
std::istream_iterator<double>(),					 // весь ввод (всю строку шо ввели)
std::ostream_iterator<double>(std::cout, ","), // на экран (через зпт)
std::bind2nd (std::greater<int>(),5) );			// тока если елементы больше 5
}
 
Статус
Закрыто для дальнейших ответов.