|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jan 2000
Messaggi: 551
|
C++ STL Help: Risultati sbagliati con accumulate algorithm
Questo è l'esempio che ho fatto
Codice:
// file: es_accum.cpp #include <stdio.h> #include <iostream.h> #include <vector> #include <algorithm> #include <numeric> //for accumulate #include <functional> // for greater<> main() { double stuff[]={3.23,4.23,5.23}; vector<double> vStuff(stuff,stuff+3); cout<<"Vector vStuff= [ "; copy(vStuff.begin(),vStuff.end(),ostream_iterator<double>(cout, " ")); //'\n' cout<<" ]"<<endl; cout<<"Accumulate sample:sum vStuff elements"<<endl; double SumvStuff=accumulate(vStuff.begin(),vStuff.end(),0); cout<<"Sum="<<SumvStuff<<endl; getchar(); } bcc 5.5 log: Borland C++ 5.5 for Win32 Copyright (c) 1993, 2000 Borland es_accum.cpp: Warning W8008 C:\Programmi\Borland\CBuilder5\Include\vector.h 213: Condition is always false in function __init_aux<double *>(double *,double *,_RW_is_not_integer) Warning W8066 C:\Programmi\Borland\CBuilder5\Include\vector.h 214: Unreachable code in function __init_aux<double *>(double *,double *,_RW_is_not_integer) Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Capisco che il problema è in _RW_is_not_integer Ma come risolverlo? nota .Presumo che RW stia per Rogue Wave cioè la company che ha implementato la libreria |
![]() |
![]() |
![]() |
#2 |
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
Visto che non specifichi i parametri del template, il compilatore li
deduce dai parametri che passi alla funzione. Ma 0 e' un intero, non un float e quindi cerca di generare il codice sbagliato. Usando 0.0 dovresti risolvere tutto. |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jan 2000
Messaggi: 551
|
Non hai idea Marco di quanto mi hai aiutato,penso che ci avrei messo non meno di una settimana
a capire dove era il problema. Il fatto è che di accumulate ne devo fare molto uso e gia bestemmiavo all'idea di scrivere ogni volta uno schifoso loop. Grazie per la spiegazione sulle differenti rappresentazioni dello zero.Chissà quanti altri errori avrei commesso... Un'ultima cosa ![]() Forse ti riferisci al Function Object plus<double>() per specificare il modo di "accumulare" ? |
![]() |
![]() |
![]() |
#4 |
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
Dovresti specificare i parametri della funzione stessa ( se non vuoi dover usare necessariamente lo 0.0 ). Visto che prevede due parametri (il primo l'iteratore, il second il tipo di ritorno) e' sufficiente che scrivi una cosa del genere:
Codice:
typedef vector<double>::iterator It; // giusto per semplificare la linea sottostante double SumvStuff=accumulate<It,double>(vStuff.begin(),vStuff.end(),0); |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jan 2000
Messaggi: 551
|
Grazie mille Ciao
![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:44.