I'm reading about the algorithm partial_sum and there are two different versions of this.

The first one just calculates cumulative numbers like this:

``````#include <iostream>
#include <numeric>
#include <vector>

using namespace std;

int main()
{
int a[4] = {10, 20, 30, 40}, b[4];

partial_sum(a, a+4, b);

copy(b, b+4, ostream_iterator<int>(cout, " "));
cout<<endl;

cout<<"Press any key to continue!\n";
cin.get();

return 0;
}``````

The second one can be used for other algorithmetic reasons, like multiplying for example:

``````#include <iostream>
#include <numeric>
#include <list>

using namespace std;

int main()
{
long a[4] = {10, 20, 30, 40}, b[4];

partial_sum(a, a+4, b, multiplies<long>());

copy(b, b+4, ostream_iterator<long>(cout, " "));
cout<<endl;

cout<<"Press any key to continue!\n";
cin.get();

return 0;
}``````

The questions I have though are:

1) I can't seem to be able to use the second version with #include <vector>, why is that?
2) How can I know wich header file is exactly needed for this?

2
Contributors
7
Replies
8
Views
13 Years
Discussion Span
Last Post by Stoned_coder

why not?

``````#include<vector>
#include<iostream>
#include<numeric>
using namespace std;
int main()
{
vector<int> vec;
for( int i = 0;i<10;++i)
vec.push_back(i);
partial_sum(vec.begin(),vec.end(),ostream_iterator<int>(cout," "));
cout<<endl;
partial_sum(vec.begin(),vec.end(),ostream_iterator<int>(cout," "),multiplies<int>());
return 0;
}``````

Thanks for your example Stoned_coder, but that wasn't really my question ;)

What I want to know is wich is the correct header file for using partial_sum, <list> or <vector>, but, I think Ive got it since I'm able to use <list> for both versions and not <vector> :!:

partial_sum is in <numeric>

That's exactly what was written in my book, the only thing is, if I use

``partial_sum(a, a+4, b, multiplies<long>());``

without <list>, it doesn't work :confused:

I get two errors:

Compiling...
main.cpp
C:\Program Files\Microsoft Visual Studio\MyProjects\LAVbBoek\main.cpp(13) : error C2065: 'multiplies' : undeclared identifier
C:\Program Files\Microsoft Visual Studio\MyProjects\LAVbBoek\main.cpp(13) : error C2062: type 'long' unexpected
Error executing cl.exe.

main.obj - 2 error(s), 0 warning(s)

oops yeah i forgot that header too in my example. multiplies is in <functional>.

Ah, ok thanks, that worked :) Strange that it isn't mentioned in the book though, they only talk about <numeric> :rolleyes:

Does the example work because <list> contains <functional> :?:

i expect so

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.