Передача в copy имен массивов без указания индексов
От: Myav  
Дата: 03.02.08 19:10
Оценка: :)
Учитывая, что имя массива неявно преобразуется в указатель на первый элемент, можно предположить, что такое:

int main()
{
  string a[] = { "hello", " world", "!!!" };
  copy(&a, &a+3, ostream_iterator<string>(cout, " "));
  cout << endl;
}


...заработает. Но оно не работает если явно не указать индексы:

// ...
copy(&a[0], &a[0]+3, ostream_iterator<string>(cout, " "));
// ...


А я читал, что неявное преобразование имени массива в указатель работает всегда What went wrong?

g++ 4.2.2
Re: Передача в copy имен массивов без указания индексов
От: c-smile Канада http://terrainformatica.com
Дата: 03.02.08 19:16
Оценка:
Здравствуйте, Myav, Вы писали:

M>
M>int main()
M>{
M>  string a[] = { "hello", " world", "!!!" };
M>  copy(&a, &a+3, ostream_iterator<string>(cout, " "));
M>  cout << endl;
M>}
M>


Ты словами напиши что этот код должен делать.
В частности что ты имеешь ввиду в этой строке:
copy(&a, &a+3, ostream_iterator<string>(cout, " "));

?
Re: Передача в copy имен массивов без указания индексов
От: kostikov Россия  
Дата: 03.02.08 19:17
Оценка: +1
Зачем разыменовывать указатель?
Вот так всё работает (MSVC 2005):
  std::string a[] = { "hello", " world", "!!!" };
  std::copy(a, a+3, std::ostream_iterator<std::string>(std::cout, " "));
  std::cout << std::endl;
Re: Передача в copy имен массивов без указания индексов
От: Анатолий Широков СССР  
Дата: 03.02.08 19:19
Оценка:
M>А я читал, что неявное преобразование имени массива в указатель работает всегда What went wrong?

Все дело в волшебных пузырьках — на словах вы сказали все верно, а вот написали не совсем то. Попробуйте:

int main()
{
string a[] = { "hello", " world", "!!!" };
copy(a, a+3, ostream_iterator<string>(cout, " "));
cout << endl;
}
Re[2]: Передача в copy имен массивов без указания индексов
От: Myav  
Дата: 03.02.08 19:21
Оценка:
Здравствуйте, kostikov, Вы писали:

K>Зачем разыменовывать указатель?

K>Вот так всё работает (MSVC 2005):
K>
K>  std::string a[] = { "hello", " world", "!!!" };
K>  std::copy(a, a+3, std::ostream_iterator<std::string>(std::cout, " "));
K>  std::cout << std::endl;
K>


Да, амперсанд был лишним. Запечатался. Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.