Re: Moving Bytes around
Use memmove and beware it operates on bytes, so multiply
your sizes by sizeof(double). E.g.:
// Error checking omitted
// Shift elements to the right to make space for a new element
memmove(Entry + EntryPosition, Entry + (EntryPosition + 1),
(NumEntries - EntryPosition) * sizeof(double));
Only use this on plain C arrays of built-in C types. Never
do anything like this on arrays of C++ class intances or on
container classes.
FWIW, you could simplify your code quite a bit by using an STL
container like vector:
std::vector<double> Entries;
Entries.insert(Entries.begin() + EntryPosition, EntryValue);
Of course you'd likely already have EntryPosition as an iterator,
so it'd simply be:
std::vector<double>::iterator EntryPosition = ...;
Entries.insert(EntryPosition, EntryValue);
One advantage of an STL container is it can automatically grow
as you add elements to it. OTOH, it may not be as efficient as
memmove.
Finally, an array/vector may not even be the best representation
for your data. STL offers other containers like list, deque, set,
multiset.
--
=====================================
Alexander Nickolov
Microsoft MVP [VC], MCSD
email: agnickolov@mvps.org
MVP VC FAQ: http://vcfaq.mvps.org
=====================================
"GeorgeJ" <GeorgeJ@discussions.microsoft.com> wrote in message
news:0503F4D7-5A18-4885-A853-B54266614676@microsoft.com...
I'm new to C++. Long ago I was familiar with PASCAL, which had the
commands
Moveright and Moveleft. I know there are equivalents in C++, I just
haven't
been able to find out what they are. I am playing around with the
following
program...
#include <iostream>
using namespace std;
const MaxEntries = 1001;
double Entry[MaxEntries];
int NumEntries;
void AddEntry(double EntryValue, int EntryPosition){
int i;
for (i=NumEntries;i>=EntryPosition;i--) Entry[i+1]=Entry[i];
Entry[EntryPosition]=EntryValue;NumEntries++;
};
void RemoveEntry(int EntryPosition){
int i;
for(i=EntryPosition;i<NumEntries;i++) Entry[i]=Entry[i+1];
NumEntries--;
};
void ShowEntries(){
int i;
for (i=1;i<=NumEntries;i++) cout <<"Entry[" << i << "] = " << Entry[i]
<<"\n";
};
int main()
{int DoubleSize = sizeof(double);
int i;
NumEntries=6;
for (i=1;i<=NumEntries;i++) Entry[i]=i*2;
ShowEntries();
AddEntry(73,4);
ShowEntries();
RemoveEntry(4);
ShowEntries();
}
For reasons of speed I would like to be able to replace the 2 routines
with
something like this..
void AddEntry(double EntryValue, int EntryPosition){
Moveright(Entry[EntryPosition],Entry[EntryPosition+1],sizeof(Double)*(NumEntries+1-EntryPosition);
Entry[EntryPosition]=EntryValue;NumEntries++;
};
void RemoveEntry(int EntryPosition){
MoveLeft(Entry[EntryPosition+1],Entry[EntryPosition],sizeof(double)*(NumEntries-Entryposition))
NumEntries--;
};
But C++ doesn't have the moveleft and moveright commands. Can anyone
point
me in the direction of the correct C++ commands?
--
-regards