Hello ladies and gents,

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?

Recommended Answers

All 7 Replies

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> :?:

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.