Ссылка была изменена с помощью std::make_pair() [дубликат]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Ссылка была изменена с помощью std::make_pair() [дубликат]

Сообщение Anonymous »

При решении проблем с leetcode я столкнулся с этой проблемой.
Если переменная node является ссылочным типом, она будет изменена с помощью std::make_pair() в условие first if, и node.first, и node. Second будут недействительны, что приведет к сбою доступа к node.first во втором условии if.
Если node имеет значение не ссылочный тип, просто копия node_vec, все работает нормально. Почему?

Код: Выделить всё

#include 
#include 

// Definition for a binary tree node.
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode() : val(0), left(nullptr), right(nullptr) {}
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
TreeNode(int x, TreeNode* left, TreeNode* right) : val(x), left(left),
right(right) {}
};

class Solution {
public:
bool isCompleteTree(TreeNode* root) {
std::vector node_vec;
if (root == nullptr)
return true;

node_vec.push_back(std::make_pair(root, 0));
int idx = 0;
while (idx < node_vec.size()) {
const auto& node = node_vec[idx];
//const auto node = node_vec[idx];

std::cout left, idx * 2 + 1)
);
std::cout right, idx * 2 + 2));
}
++idx;
}
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/78550168/reference-was-modified-by-stdmake-pair[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»