簡體   English   中英

C ++從指針遍歷映射

[英]C++ Iterating through map from pointer

我想遍歷一個映射,該地址存儲在一個指針中,因此我可以訪問和修改原始映射,但是,每當我嘗試進行迭代時,它總是會給我造成讀取訪問沖突。

#include <map>

template<typename A, typename B>
class map_array_util
{
public:
map_array_util(std::map<A,B> _m)
{
    m = &_m;
}

void copy(B *arr, int size)
{

}

bool equals(B *arr, int size) const
{
    int i = 0;
    for (auto it = (*m).begin(); it != (*m).end(); ++it)
    {
        std::pair<A, B> p = *it;
        if (*(arr + i) != p.second)
        {
            return false;
        }
        i++;
    }

    return true;
}
private:
std::map<A, B> *m;
};

我們如何以正確的方式進行迭代?

您將本地副本的地址存儲在

map_array_util(std::map<A,B> _m)
{
    m = &_m;
}

因此,您有懸空的指針。

您可能希望通過引用傳遞:

map_array_util(std::map<A,B>& _m) : m(&_m) {}

代替map_array_util(std::map<A,B> _m) ,您可能意味着

map_array_util(std::map<A,B> &_m)
//                           ^

順便說一句,這不是國際海事組織的好主意。 您可以更好地從reference_wrapper驅動類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM