Last active
August 28, 2019 16:32
-
-
Save ilev4ik/425afdfe4e6cbbfb4d4c5ceb87122152 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <unistd.h> | |
int main() | |
{ | |
// stdout имеет буффер, где накапливается вывод | |
// буффер освобождается при встрече с символом '\n', fflush(stdout) | |
// или его переполнении. Размер буффера определён макросом BUFSIZ (обычно 8192; implementation defined) | |
// fork создаёт дочерний процесс и возвращает его PID или -1 в случае неудачи. пусть всё удачно... | |
// fork очень дорогостоящий системный вызов, т.к. он копирует практически все данные (кроме например, таблицы открытых fd...) | |
// заполнить буффер stdout "hello". Нет вывода на экран | |
printf("hello"); | |
// создать дочерний процесс | |
fork(); | |
// здесь уже имеем 2 процесса, где у каждого свой откопированный buffer вывода (в том числе), содержащий "hello" | |
// для каждого из процессов очистить буффер и вывести на экран "hello\n" | |
printf("\n"); | |
// upd. опечатки))) | |
// если fork() == -1, то выведется: "hello\n" | |
// иначе: "hello\nhello\n" | |
// при этом возможно перемежение вывода, т.к. данные в файл пишутся не синхронизировано | |
return 0; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// remove duplicates from given vector of smth | |
#include <iostream> | |
#include <algorithm> | |
#include <vector> | |
#include <iterator> | |
template <typename T> | |
void remove_duplicates(std::vector<T>& vec) | |
{ | |
if (vec.empty()) return; | |
// time: O(nlogn), space O(1) -- in-place | |
std::sort(vec.begin(), vec.end()); | |
std::size_t slow = 0, fast = 0; | |
// time: O(n), space O(1) | |
for (; fast < vec.size(); ++fast) { | |
if (vec[slow] != vec[fast]) { | |
slow++; | |
vec[slow] = vec[fast]; | |
} | |
} | |
// time: O(n), space: O(1) | |
vec.erase(std::next(vec.begin(), slow + 1), vec.end()); | |
// Итого: | |
// time: O(nlogn), space: O(1) | |
} | |
template <typename C> | |
void print_iterable(const C& cont) { | |
std::copy(cont.begin(), cont.end(), std::ostream_iterator<typename C::value_type>(std::cout, ", ")); | |
} | |
int main() { | |
std::vector<int> v = {0, 1, 0, 2, 5, 5, 7, 1, 10, 123, 3, 3, 0, 1}; | |
remove_duplicates(v); | |
print_iterable(v); | |
return 0; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <fstream> | |
void use_file(const char* name) | |
{ | |
// использование f, при котором может быть выброшено исключение | |
// т.к. мб выброшено исключение, то чтение из файла посредством fopen не годится | |
// при выбросе исключения не будет закрыт файл. fd останется "висеть" | |
// лучше использовать объект std::basic_ostream, который реализует в себе идиому RAII | |
std::ofstream file(name); | |
if (file.is_open()) { | |
std::string line; | |
while (getline(file, line)) { | |
printf("%s\n", line.c_str()); | |
// ... stuff that may raise an exception | |
// throw 1; | |
} | |
// не достигнем | |
file.close(); | |
} | |
// при вызове деструктора освобождается буффер и закрывается файл | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment