Вы можете использовать обратные итераторы для итерации через родителей, например:
#include <iostream>
#include <vector>
int main() {
std::vector<int> parent1{1, 2, 3, 4, 5};
std::vector<int> parent2{6, 7, 8, 9, 0};
std::vector<int> child1;
std::vector<int> child2;
int cut = 2;
{
auto cut1 = std::begin(parent1); // set cut1 to element 1
auto cut2 = parent2.rbegin(); // set cut2 to element 0 (reverse)
std::advance(cut1, cut); // iterate cut1 to element 3
std::advance(cut2, cut); // iterate cut2 to element 8 (reverse)
child1.insert(child1.end(), cut1, std::end(parent1)); // copy elements 3, 4 ,5
child1.insert(child1.end(), parent2.rbegin(), cut2); // copy elements 0, 9 (reverse)
}
{
auto cut1 = parent1.rbegin(); // set cut1 to element 5 (reverse)
auto cut2 = parent2.begin(); // set cut2 to element 6
std::advance(cut1, parent1.size() - cut); // iterate cut1 to element 2 (reverse)
std::advance(cut2, parent2.size() - cut); // iterate cut2 to element 9
child2.insert(child2.end(), cut1, parent1.rend()); // copy elements 2, 1 (reverse)
child2.insert(child2.end(), parent2.begin(), cut2); // copy elements 6, 7, 8
}
for (const auto& el : child1) {
std::cout << el << " ";
}
std::cout << std::endl;
for (const auto& el : child2) {
std::cout << el << " ";
}
std::cout << std::endl;
return 0;
}
С C ++ 14 вы можете использовать std::rbegin(parent2)
вместо parent2.rbegin()
.
Вы, вероятно, после чего-то вроде этого:
if(System.Diagnostics.Debugger.IsAttached)
System.Diagnostics.Debugger.Break();
, Конечно, который будет все еще скомпилирован в Сборке конечных версий. Если Вы хотите, чтобы он вел себя больше как объект Отладки, где код просто не существует в Сборке конечных версий, то Вы могли сделать что-то вроде этого:
// Conditional("Debug") means that calls to DebugBreak will only be
// compiled when Debug is defined. DebugBreak will still be compiled
// even in release mode, but the #if eliminates the code within it.
// DebuggerHidden is so that, when the break happens, the call stack
// is at the caller rather than inside of DebugBreak.
[DebuggerHidden]
[Conditional("DEBUG")]
void DebugBreak()
{
if(System.Diagnostics.Debugger.IsAttached)
System.Diagnostics.Debugger.Break();
}
Тогда добавляют вызов к нему в Вашем коде.
Я столкнулся с ситуацией однажды, где это не работало
System.Diagnostics.Debugger.Break();
, но это сделало
System.Diagnostics.Debugger.Launch();
Как насчет того, чтобы просто настроить Visual Studio для появления с отладчиком, даже если Вы глотаете его?
Делают это:
, то Это остановит Visual Studio на местоположении, что исключение выдается, не просто, если это не обрабатывается.
Вы видите больше информации здесь .
Хороший прием, который я нашел, помещает Отладчик. Повреждение () в ctor Вашего Исключения.