我通过GetProcessMemoryInfo和PROCESS_MEMORY_COUNTERS获取进程内存使用情况,我想比较哪些用户最多。
我尝试使用std::<list>
创建<list>
类型的SIZE_T
。
我添加如下元素:
list<SIZE_T> sizes;
PROCESS_MEMORY_COUNTERS info = { 0 };
info.cb = sizeof(info);
GetProcessMemoryInfo(process, &info, sizeof(info));
sizes.push_back(info.WorkingSetSize);
找到最大的:
SIZE_T temp = 0;
for (SIZE_T i = 0; i < sizes.size(); ++i){
if (sizes[i] > temp){
temp = sizes[i];
}
}
或者我使用它错了吗?
泰 *这里不要说我不能做SIZE_T(http://www.cplusplus.com/reference/list/list/)
答案 0 :(得分:5)
您无法在std::list
上使用数组样式索引。可以使用std::vector<SIZE_T>
标准库算法将容器更改为std::max_element
或更改循环。例如:
SIZE_T largest = *std::max_element(sizes.begin(), sizes.end()); // assumes the list isn't empty
请注意,std::max_element
会返回迭代器,因此我必须取消引用它才能获取值。
答案 1 :(得分:4)
无法使用std::vector
之类的索引访问列表,因为到达第N个元素需要N次操作。
你想要的只是最大值,所以这一行就足够了:
SIZE_T max = *std::max_element(begin(sizes),end(sizes));
您需要包含algorithm
标头,并始终尝试对原始循环使用算法函数。
编辑:sizes
必须包含某些内容或尊重*
是非法的