Can you talk a bit about the design decisions behind DeviceCollection? It seems as if you're doing a bit of wheel reinvention (as compared to say a STL iterator) here.

I have something like this in mind:

DeviceCollection::iterator itr;
for (itr = devices.begin(); itr != devices.end(); ++itr) {
PelcoSDK::Device device(*itr);
printf("Device Friendly Name: %s\n", device.GetFriendlyName().c_str());
}