Печать values
не будет печатать содержимое массива, как вы ожидаете, она напечатает ячейку памяти первого элемента массива.
Попробуйте что-то вроде этого:
#include <iterator>
#include <algorithm>
// ...
copy(&values[0], &values[MAX], ostream_iterator(cout, " "));
Извините, я не могу опубликовать реальный рабочий код, но ваш оригинальный пост - беспорядок со многими синтаксическими и синтаксическими ошибками.
РЕДАКТИРОВАТЬ: Чтобы быть более полным, более доступным и понятным для начинающих, я написал небольшую программу, которая иллюстрирует 4 способа достижения этой цели.
Метод 1 использует copy
с ostream_iterator
, как я делал выше.
Метод 2, приведенный ниже, является, вероятно, самым простым и простым для понимания.
Метод 3 является методом C ++ 0x. Я знаю, что вопрос помечен C ++, но я подумал, что это может быть полезно, чтобы добавить это.
Метод 4 - это подход C ++, использующий vector
и for_each
. Я реализовал функтор, который выполняет сброс.
Поделиться и наслаждаться
#include <iostream>
#include <iterator>
#include <algorithm>
#include <functional>
#include <vector>
using namespace std;
struct dump_val : public unary_function<int,void>
{
void operator()(int val)
{
cout << val << " ";
}
};
int main(){
int vals[5] = {1,2,3,4,5};
// version 1, using std::copy and ostream_iterator
copy(&vals[0], &vals[5], ostream_iterator<int>(cout, " "));
cout << endl;
// version 2, using a simple hand-written loop
for( size_t i = 0; i < 5; ++i )
cout << vals[i] << " ";
cout << endl;
// version 3, using C++0x lambdas
for_each(&vals[0], &vals[5], [](int val)
{
cout << val << " ";
}
);
cout << endl;
// version 4, with elements in a vector and calling a functor from for_each
vector<int> vals_vec;
vals_vec.push_back(1);
vals_vec.push_back(2);
vals_vec.push_back(3);
vals_vec.push_back(4);
vals_vec.push_back(5);
for_each( vals_vec.begin(), vals_vec.end(), dump_val() );
cout << endl;
}