【问题标题】:C++ std::<list> SIZE_T type [closed]C++ std::<list> SIZE_T 类型 [关闭]
【发布时间】:2014-12-19 22:57:39
【问题描述】:

我正在使用 GetProcessMemoryInfo 和 PROCESS_MEMORY_COUNTERS 获取进程内存使用情况,我想比较谁的使用量最大。

我正在尝试使用std::&lt;list&gt; 来创建我的&lt;list&gt;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/)

【问题讨论】:

  • 您是否收到编译器错误,或者您有什么问题?你真的有std::&lt;list&gt; 吗? (好的,现在真正的定义添加了,忘了最后一部分)
  • SIZE_T 是什么?你是说size_t 吗?
  • Error 1 error C2676: binary '[' : 'std::list>' 未定义此运算符或转换为预定义可接受的类型操作员。我使用 SIZE_T 因为这里说 WorkingSetSize 是 SIZE_T msdn.microsoft.com/en-us/library/windows/desktop/…
  • @Júlio 嗯,这是真的。它不是数组等,没有 [] 实现。如果您真的想保留该列表,请参阅stackoverflow.com/questions/5733842/…
  • 也许你想要一个vector 代替?

标签: c++ c++11


【解决方案1】:

您不能在 std::list 上使用数组样式索引。将您的容器更改为std::vector&lt;SIZE_T&gt; 或更改您的循环,可能使用std::max_element 标准库算法。例如:

SIZE_T largest = *std::max_element(sizes.begin(), sizes.end()); // assumes the list isn't empty

注意std::max_element 返回一个迭代器,所以我必须取消对它的引用才能获得值。

【讨论】:

    【解决方案2】:

    无法使用std::vector 之类的索引访问列表,因为到达第 N 个元素需要 N 次操作。

    你想要的只是最大值,所以这一行就足够了:

    SIZE_T max = *std::max_element(begin(sizes),end(sizes));
    

    您需要包含algorithm 标头并始终尝试对原始循环使用算法函数。

    编辑:sizes 必须包含某些内容,否则对* 的尊重是非法的

    【讨论】:

    • 泰!但我不能全部接受。该网站只允许接受 1.
    猜你喜欢
    • 2014-07-02
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    相关资源
    最近更新 更多