|
Hi Chris Losinger,
Please read the context,
--------------------
In summary, you should prefer a deque if the following is true:
It is important that the container frees memory when it is no longer used (however, the standard does not guarantee that this happens).
--------------------
I do not know why "container frees memory is a reason why we use deque". I think it is up to implementation whether to free the memory or delay the free for the reason of performance improvement when we do rease/pop.
I think the author does not mean memory leak. Any comments? I do not know why it becomes a reason...
regards,
George
|
|
|
|
|
i don't have an answer for this.
you use a dequeue when you needs its primary functionality (ex: pop_front, push_back) and don't need random access (like with a vector). the exact implementation and its memory allocation strategy is not worth worrying about in the vast majority of situations.
|
|
|
|
|
Thanks Chris Losinger,
Question answered.
regards,
George
|
|
|
|
|
dear all
how to understand typedef and struct..
for example: typedef struct a
{
int c;
int b;
} ddd;
how to understand typedef and ddd here/ thanks a lot
sorry for such easy question.
Li Zhiyuan
|
|
|
|
|
The typedef keyword creates a new name for an existing type. Using your example,
typedef struct a {
int c;
int b;
} ddd; you can use the following:
struct a a1;
ddd a2; This can be very useful when the existing name for a type is complicated (for example, with templates in C++).
|
|
|
|
|
thanks friend.
how to understand ddd here? what does it denote? thanks
Li Zhiyuan
|
|
|
|
|
ddd is simply another name for the original struct a type.
Let me create another example for you:
template <typename integer>
class Process {
public:
Process(integer initial)
: Initial(initial)
{ };
private:
integer Initial;
};
typedef Process<unsigned long> ProcessULong; Now, rather than having to type "Process<unsigned long> " every time you want to declare a value of this type, you can simply use "ProcessULong ", like this:
ProcessULong PUL1; typedef 's are simply a convenience. They don't create a new type. They simply make a new name for an existing type.
|
|
|
|
|
Hello everyone,
I am studying the C++ Standard Library book. In 6.3 Deques, it is mentioned,
1.
Iterators must be smart pointers of a special type rather than ordinary pointers because they must jump between different blocks.
What means "smart pointers of a special type" here? I do not understand if smart pointers here means auto_ptr something.
2.
In systems that have size limitations for blocks of memory (for example, some PC systems), a deque might contain more elements because it uses more than one block of memory. Thus, max_size() might be larger for deques.
I do not quite understand why we need special care about "more elements, ... more than one block of memory". I have this confusion is because deque is implemented as chunks of memory internally, which is already more than one blocks of memory, it has nothing to do with size limitations. What does the author mean here?
Why "max_size() might be larger for deques"?
thanks in advance,
George
|
|
|
|
|
1. "smart" means that the iterators must overload e.g. the ++ and -- operators to deal with non-contiguous memory blocks. That means a deque iterator must be a class type as opposed to a vector iterator which can be a plain pointer.
2. Did you miss the part that says: "Deques have the following differences compared with the abilities of vectors"? Vectors must be in contiguous memory, deques may have multiple separate blocks. If the size of a contiguous memory block is limited, deques may grow bigger than vectors.
|
|
|
|
|
Thanks markkuk,
1.
markkuk wrote: 1. "smart" means that the iterators must overload e.g. the ++ and -- operators to deal with non-contiguous memory blocks. That means a deque iterator must be a class type as opposed to a vector iterator which can be a plain pointer.
Thanks. Your description is clear. So it does not mean auto_ptr, just mean the pointer is not a plain raw point to deal with contigious memory block. Right?
2.
"the ++ and -- operators to deal with non-contiguous memory blocks", I think for deque, it involves move between different internal chunks (which are not continuous in memory address), right?
3.
Is it a must vector must use continuous memory block? I think it is not a must and if not a must, then for vector, it should be also smart pointer?
regards,
George
|
|
|
|
|
Hello everyone,
For random access iterator, operator[] is supported. Mentioned in Bjarne's book, Chapter 19 (Iterators and Allocators).
I have not used operator[] on random access iterator before and I have not found a good and simple sample either.
Could anyone show its usage with some pseudo code please?
thanks in advance,
George
|
|
|
|
|
|
Thanks Steve!
Question answered.
regards,
George
|
|
|
|
|
Hello !
I wish to create a windows service using MFC\C\C++ in Visual Studio 6.0 (not using .NET !!).
How ?
Amit
|
|
|
|
|
Codeproject has articles about it did you search for them?
|
|
|
|
|
I searched for articles about it in CodeProject but found only articles using C#\.NET to create windows services - I wish to use C\C++\MFC
|
|
|
|
|
|
Hi all,
I just wanted to know if we can superimpose text over video. like subtitles in DVD. can i do this in mfc? do i need to use some other technology to do this?
|
|
|
|
|
One way is to use DirectShow[^] for the video. There's a video mixing renderer (VMR)
that does bitmap-on-video overlays.
If you render the video yourself, or have access to the video frames, you can draw
on them before or as they are rendered.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Many years ago, Jeffrey Richter wrote a program to show how to delete a program itself when it was closed. It sounds very funny, and I tried this program yesterday. I saidly found that the program does deleted but the temp file still exist. It seems that FILE_FLAG_DELETE_ON_CLOSE flag doesn't work on a exe file.
Here is the source code.Any one knowns why the temp file doesn't get deleted?
int WINAPI _tWinMain(HINSTANCE h, HINSTANCE b, LPTSTR psz, int n)<br />
{<br />
if (__argc == 1) <br />
{<br />
TCHAR szPathOrig[_MAX_PATH], szPathClone[_MAX_PATH];<br />
GetModuleFileName(NULL, szPathOrig, _MAX_PATH);<br />
GetTempPath(_MAX_PATH, szPathClone);<br />
GetTempFileName(szPathClone, __TEXT("Del"), 0, szPathClone);<br />
CopyFile(szPathOrig, szPathClone, FALSE);<br />
HANDLE hfile = CreateFile(szPathClone, 0, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, NULL);<br />
TCHAR szCmdLine[512];<br />
HANDLE hProcessOrig = OpenProcess(SYNCHRONIZE, TRUE, GetCurrentProcessId());<br />
wsprintf(szCmdLine, __TEXT("%s %d \"%s\""), szPathClone, hProcessOrig, szPathOrig);<br />
STARTUPINFO si;<br />
ZeroMemory(&si, sizeof(si));<br />
si.cb = sizeof(si);<br />
PROCESS_INFORMATION pi;<br />
CreateProcess(NULL, szCmdLine, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);<br />
CloseHandle(hProcessOrig);<br />
CloseHandle(hfile);<br />
}<br />
else<br />
{<br />
HANDLE hProcessOrig = (HANDLE) _ttoi(__targv[1]);<br />
WaitForSingleObject(hProcessOrig, INFINITE);<br />
CloseHandle(hProcessOrig);<br />
DeleteFile(__targv[2]);<br />
}<br />
return(0);<br />
}
A Chinese VC++ programmer
|
|
|
|
|
I didnt try to it but maybe you can run a batch file and on that file write for delete your file and itself when you want to close your program.
|
|
|
|
|
Thank you!
What you said is one of the many ways to delete a program itself.
A Chinese VC++ programmer
|
|
|
|
|
You're welcome.
|
|
|
|
|
in my current project i need to create/delete a user/group using win32 apis ,
is it possible to do so ...If so whats the api i need to call ??
|
|
|
|
|