Я на самом деле должен был сделать это как раз сегодня. Действительно простой способ сделать это находится в терминале, так тип:
cat [directory of external disk] > ~/newfile.iso
Для нахождения каталога внешнего диска открывают средство запуска Единицы и ищут "Системный монитор", затем перейдите к "Файловым системам".
, Таким образом, пример был бы похож:
cat /dev/scd0 > ~/newfile.iso
Просто перебираем элементы. Как это:
for (int i = numElements - 1; i >= 0; i--)
cout << array[i];
Примечание: Как указал Максим Егорушкин, это могло переполниться. См. Его комментарий ниже для лучшего решения.
Используйте курсоры STL
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
int main()
{
std::vector<int> userInput;
// Read until end of input.
// Hit control D
std::copy(std::istream_iterator<int>(std::cin),
std::istream_iterator<int>(),
std::back_inserter(userInput)
);
// Print in Normal order
std::copy(userInput.begin(),
userInput.end(),
std::ostream_iterator<int>(std::cout,",")
);
std::cout << "\n";
// Print in reverse order:
std::copy(userInput.rbegin(),
userInput.rend(),
std::ostream_iterator<int>(std::cout,",")
);
std::cout << "\n";
// Update for C++11
// Range based for is now a good alternative.
for(auto const& value: userInput)
{
std::cout << value << ",";
}
std::cout << "\n";
}
Есть объявленных массивов и массивов, которые не объявлены, а созданы иным образом, в частности, с использованием new
:
int *p = new int[3];
Этот массив с 3 элементами создается динамически (и этот 3
также мог быть вычислен во время выполнения), а указатель на него, размер которого был удален из его типа, присваивается p
. Вы больше не можете получить размер для печати этого массива. Таким образом, функция, которая получает только указатель на нее, не может распечатать этот массив.
Распечатать объявленные массивы просто. Вы можете использовать sizeof
, чтобы получить их размер и передать этот размер функции, включая указатель на элементы этого массива. Но вы также можете создать шаблон, который принимает массив и выводит его размер из объявленного типа:
template<typename Type, int Size>
void print(Type const(& array)[Size]) {
for(int i=0; i<Size; i++)
std::cout << array[i] << std::endl;
}
Проблема в том, что он не принимает указатели (очевидно). Я думаю, что самое простое решение - использовать std :: vector
. Это динамический "массив" с изменяемым размером (с семантикой, которую вы ожидаете от реального), который имеет функцию-член size
:
void print(std::vector<int> const &v) {
std::vector<int>::size_type i;
for(i = 0; i<v.size(); i++)
std::cout << v[i] << std::endl;
}
Вы, конечно, также можете сделать это шаблоном для принимать векторы других типов.
Помимо решений на основе цикла for, вы также можете использовать ostream_iterator <> . Вот пример, в котором используется пример кода из (ныне исключенной) ссылки на SGI STL:
#include <iostream>
#include <iterator>
#include <algorithm>
int main()
{
short foo[] = { 1, 3, 5, 7 };
using namespace std;
copy(foo,
foo + sizeof(foo) / sizeof(foo[0]),
ostream_iterator<short>(cout, "\n"));
}
Это генерирует следующее:
./a.out
1
3
5
7
Однако это может быть излишним для ваших нужд. Прямой цикл for - это, вероятно, все, что вам нужно, хотя шаблон litb тоже неплох.
Правка : Забыл о требовании «печати в обратном направлении». Вот один из способов сделать это:
#include <iostream>
#include <iterator>
#include <algorithm>
int main()
{
short foo[] = { 1, 3, 5, 7 };
using namespace std;
reverse_iterator<short *> begin(foo + sizeof(foo) / sizeof(foo[0]));
reverse_iterator<short *> end(foo);
copy(begin,
end,
ostream_iterator<short>(cout, "\n"));
}
и вывод:
$ ./a.out
7
5
3
1
Edit : обновление C ++ 14, которое упрощает приведенные выше фрагменты кода с использованием функций итератора массива, таких как std :: begin () и std :: rbegin () :
#include <iostream>
#include <iterator>
#include <algorithm>
int main()
{
short foo[] = { 1, 3, 5, 7 };
// Generate array iterators using C++14 std::{r}begin()
// and std::{r}end().
// Forward
std::copy(std::begin(foo),
std::end(foo),
std::ostream_iterator<short>(std::cout, "\n"));
// Reverse
std::copy(std::rbegin(foo),
std::rend(foo),
std::ostream_iterator<short>(std::cout, "\n"));
}
Большинство библиотек, обычно используемых в C ++, не могут печатать массивы как таковые. Вам придется пройти его вручную и распечатать каждое значение.
Печать массивов и выгрузка различных типов объектов - это функция языков более высокого уровня.
C ++ может печатать все, что вы хотите, если вы запрограммируете его для этого. Вам придется самостоятельно просматривать массив, печатая каждый элемент.
Несомненно! Вам придется просмотреть массив и распечатать каждый элемент отдельно.