Вы видите копию треда, сохраненную 17 апреля 2015 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
http://www.google.com
http://www.cppreference.com
http://www.cplusplus.com
Список литературы:
http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list
http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list
Предыдущий тред (тонет):
>>441690
Красава, хорошо сделал. Жаль, что долбоебы все равно продолжат спрашивать, как присвоить значение переменной.
прост)))
Пик порашный
In file included from /usr/include/c++/4.6/mocha:5:0, from error_code.cpp:2:
/usr/include/c++/4.6/bits/stl_algo.h: In function ‘_RandomAccessIterator std::__find(_RandomAccessIterator, _RandomAccessIterator, const _Tp&, std::random_access_iterator_tag) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator, std::vector > >, _Tp = int]’:
/usr/include/c++/4.6/bits/stl_algo.h:4403:45: instantiated from ‘_IIter std::find(_IIter, _IIter, const _Tp&) [with _IIter = __gnu_cxx::__normal_iterator, std::vector > >, _Tp = int]’
error_code.cpp:8:89: instantiated from here
/usr/include/c++/4.6/bits/stl_algo.h:162:4: error: no match for ‘operator==’ in ‘__first.__gnu_cxx::__normal_iterator::operator [with _Iterator = std::vector, _Container = std::vector >, __gnu_cxx::__normal_iterator::reference = std::vector&]() == __val’
/usr/include/c++/4.6/bits/stl_algo.h:162:4: note: candidates are:
/usr/include/c++/4.6/bits/stl_pair.h:201:5: note: template bool std::operator==(const std::pair&, const std::pair&)
/usr/include/c++/4.6/bits/stl_iterator.h:285:5: note: template bool std::operator==(const std::reverse_iterator&, const std::reverse_iterator&)
/usr/include/c++/4.6/bits/stl_iterator.h:335:5: note: template bool std::operator==(const std::reverse_iterator&, const std::reverse_iterator&)
/usr/include/c++/4.6/bits/allocator.h:122:5: note: template bool std::operator==(const std::allocator&, const std::allocator&)
/usr/include/c++/4.6/bits/allocator.h:127:5: note: template bool std::operator==(const std::allocator&, const std::allocator&)
/usr/include/c++/4.6/bits/stl_vector.h:1273:5: note: template bool std::operator==(const std::vector&, const std::vector&)
/usr/include/c++/4.6/ext/new_allocator.h:123:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::new_allocator&, const __gnu_cxx::new_allocator&)
/usr/include/c++/4.6/bits/stl_iterator.h:805:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::__normal_iterator&, const __gnu_cxx::__normal_iterator&)
/usr/include/c++/4.6/bits/stl_iterator.h:799:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::__normal_iterator&, const __gnu_cxx::__normal_iterator&)
/usr/include/c++/4.6/bits/stl_algo.h:4403:45: instantiated from ‘_IIter std::find(_IIter, _IIter, const _Tp&) [with _IIter = __gnu_cxx::__normal_iterator, std::vector > >, _Tp = int]’
error_code.cpp:8:89: instantiated from here
/usr/include/c++/4.6/bits/stl_algo.h:166:4: error: no match for ‘operator==’ in ‘__first.__gnu_cxx::__normal_iterator::operator [with _Iterator = std::vector, _Container = std::vector >, __gnu_cxx::__normal_iterator::reference = std::vector&]() == __val’
/usr/include/c++/4.6/bits/stl_algo.h:166:4: note: candidates are:
/usr/include/c++/4.6/bits/stl_pair.h:201:5: note: template bool std::operator==(const std::pair&, const std::pair&)
/usr/include/c++/4.6/bits/stl_iterator.h:285:5: note: template bool std::operator==(const std::reverse_iterator&, const std::reverse_iterator&)
/usr/include/c++/4.6/bits/stl_iterator.h:335:5: note: template bool std::operator==(const std::reverse_iterator&, const std::reverse_iterator&)
/usr/include/c++/4.6/bits/allocator.h:122:5: note: template bool std::operator==(const std::allocator&, const std::allocator&)
/usr/include/c++/4.6/bits/allocator.h:127:5: note: template bool std::operator==(const std::allocator&, const std::allocator&)
/usr/include/c++/4.6/bits/stl_vector.h:1273:5: note: template bool std::operator==(const std::vector&, const std::vector&)
/usr/include/c++/4.6/ext/new_allocator.h:123:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::new_allocator&, const __gnu_cxx::new_allocator&)
/usr/include/c++/4.6/bits/stl_iterator.h:805:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::__normal_iterator&, const __gnu_cxx::__normal_iterator&)
/usr/include/c++/4.6/bits/stl_iterator.h:799:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::__normal_iterator&, const __gnu_cxx::__normal_iterator&)
/usr/include/c++/4.6/bits/stl_algo.h:170:4: error: no match for ‘operator==’ in ‘__first.__gnu_cxx::__normal_iterator::operator [with _Iterator = std::vector, _Container = std::vector >, __gnu_cxx::__normal_iterator::reference = std::vector&]() == __val’
/usr/include/c++/4.6/bits/stl_algo.h:170:4: note: candidates are:
/usr/include/c++/4.6/bits/stl_pair.h:201:5: note: template bool std::operator==(const std::pair&, const std::pair&)
/usr/include/c++/4.6/bits/stl_iterator.h:285:5: note: template bool std::operator==(const std::reverse_iterator&, const std::reverse_iterator&)
/usr/include/c++/4.6/bits/stl_iterator.h:335:5: note: template bool std::operator==(const std::reverse_iterator&, const std::reverse_iterator&)
/usr/include/c++/4.6/bits/allocator.h:122:5: note: template bool std::operator==(const std::allocator&, const std::allocator&)
/usr/include/c++/4.6/bits/allocator.h:127:5: note: template bool std::operator==(const std::allocator&, const std::allocator&)
/usr/include/c++/4.6/bits/stl_vector.h:1273:5: note: template bool std::operator==(const std::vector&, const std::vector&)
/usr/include/c++/4.6/ext/new_allocator.h:123:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::new_allocator&, const __gnu_cxx::new_allocator&)
/usr/include/c++/4.6/bits/stl_iterator.h:805:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::__normal_iterator&, const __gnu_cxx::__normal_iterator&)
/usr/include/c++/4.6/bits/stl_iterator.h:799:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::__normal_iterator&, const __gnu_cxx::__normal_iterator&)
/usr/include/c++/4.6/bits/stl_algo.h:174:4: error: no match for ‘operator==’ in ‘__first.__gnu_cxx::__normal_iterator::operator [with _Iterator = std::vector, _Container = std::vector >, __gnu_cxx::__normal_iterator::reference = std::vector&]() == __val’
/usr/include/c++/4.6/bits/stl_algo.h:174:4: note: candidates are:
/usr/include/c++/4.6/bits/stl_pair.h:201:5: note: template bool std::operator==(const std::pair&, const std::pair&)
/usr/include/c++/4.6/bits/stl_iterator.h:285:5: note: template bool std::operator==(const std::reverse_iterator&, const std::reverse_iterator&)
/usr/include/c++/4.6/bits/stl_iterator.h:335:5: note: template bool std::operator==(const std::reverse_iterator&, const std::reverse_iterator&)
/usr/include/c++/4.6/bits/allocator.h:122:5: note: template bool std::operator==(const std::allocator&, const std::allocator&)
/usr/include/c++/4.6/bits/allocator.h:127:5: note: template bool std::operator==(const std::allocator&, const std::allocator&)
/usr/include/c++/4.6/bits/stl_vector.h:1273:5: note: template bool std::operator==(const std::vector&, const std::vector&)
/usr/include/c++/4.6/ext/new_allocator.h:123:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::new_allocator&, const __gnu_cxx::new_allocator&)
/usr/include/c++/4.6/bits/stl_iterator.h:805:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::__normal_iterator&, const __gnu_cxx::__normal_iterator&)
/usr/include/c++/4.6/bits/stl_iterator.h:799:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::__normal_iterator&, const __gnu_cxx::__normal_iterator&)
/usr/include/c++/4.6/bits/stl_algo.h:182:4: error: no match for ‘operator==’ in ‘__first.__gnu_cxx::__normal_iterator::operator [with _Iterator = std::vector, _Container = std::vector >, __gnu_cxx::__normal_iterator::reference = std::vector&]() == __val’
/usr/include/c++/4.6/bits/stl_algo.h:182:4: note: candidates are:
/usr/include/c++/4.6/bits/stl_pair.h:201:5: note: template bool std::operator==(const std::pair&, const std::pair&)
/usr/include/c++/4.6/bits/stl_iterator.h:285:5: note: template bool std::operator==(const std::reverse_iterator&, const std::reverse_iterator&)
/usr/include/c++/4.6/bits/stl_iterator.h:335:5: note: template bool std::operator==(const std::reverse_iterator&, const std::reverse_iterator&)
/usr/include/c++/4.6/bits/allocator.h:122:5: note: template bool std::operator==(const std::allocator&, const std::allocator&)
/usr/include/c++/4.6/bits/allocator.h:127:5: note: template bool std::operator==(const std::allocator&, const std::allocator&)
/usr/include/c++/4.6/bits/stl_vector.h:1273:5: note: template bool std::operator==(const std::vector&, const std::vector&)
/usr/include/c++/4.6/ext/new_allocator.h:123:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::new_allocator&, const __gnu_cxx::new_allocator&)
/usr/include/c++/4.6/bits/stl_iterator.h:805:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::__normal_iterator&, const __gnu_cxx::__normal_iterator&)
/usr/include/c++/4.6/bits/stl_iterator.h:799:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::__normal_iterator&, const __gnu_cxx::__normal_iterator&)
/usr/include/c++/4.6/bits/stl_algo.h:186:4: error: no match for ‘operator==’ in ‘__first.__gnu_cxx::__normal_iterator::operator [with _Iterator = std::vector, _Container = std::vector >, __gnu_cxx::__normal_iterator::reference = std::vector&]() == __val’
/usr/include/c++/4.6/bits/stl_algo.h:186:4: note: candidates are:
/usr/include/c++/4.6/bits/stl_pair.h:201:5: note: template bool std::operator==(const std::pair&, const std::pair&)
/usr/include/c++/4.6/bits/stl_iterator.h:285:5: note: template bool std::operator==(const std::reverse_iterator&, const std::reverse_iterator&)
/usr/include/c++/4.6/bits/stl_iterator.h:335:5: note: template bool std::operator==(const std::reverse_iterator&, const std::reverse_iterator&)
/usr/include/c++/4.6/bits/allocator.h:122:5: note: template bool std::operator==(const std::allocator&, const std::allocator&)
/usr/include/c++/4.6/bits/allocator.h:127:5: note: template bool std::operator==(const std::allocator&, const std::allocator&)
/usr/include/c++/4.6/bits/stl_vector.h:1273:5: note: template bool std::operator==(const std::vector&, const std::vector&)
/usr/include/c++/4.6/ext/new_allocator.h:123:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::new_allocator&, const __gnu_cxx::new_allocator&)
/usr/include/c++/4.6/bits/stl_iterator.h:805:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::__normal_iterator&, const __gnu_cxx::__normal_iterator&)
/usr/include/c++/4.6/bits/stl_iterator.h:799:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::__normal_iterator&, const __gnu_cxx::__normal_iterator&)
/usr/include/c++/4.6/bits/stl_algo.h:190:4: error: no match for ‘operator==’ in ‘__first.__gnu_cxx::__normal_iterator::operator [with _Iterator = std::vector*, _Container = std::vector >, __gnu_cxx::__normal_iterator::reference = std::vector&]() == __val’
/usr/include/c++/4.6/bits/stl_algo.h:190:4: note: candidates are:
/usr/include/c++/4.6/bits/stl_pair.h:201:5: note: template bool std::operator==(const std::pair&, const std::pair&)
/usr/include/c++/4.6/bits/stl_iterator.h:285:5: note: template bool std::operator==(const std::reverse_iterator&, const std::reverse_iterator&)
/usr/include/c++/4.6/bits/stl_iterator.h:335:5: note: template bool std::operator==(const std::reverse_iterator&, const std::reverse_iterator&)
/usr/include/c++/4.6/bits/allocator.h:122:5: note: template bool std::operator==(const std::allocator&, const std::allocator&)
/usr/include/c++/4.6/bits/allocator.h:127:5: note: template bool std::operator==(const std::allocator&, const std::allocator&)
/usr/include/c++/4.6/bits/stl_vector.h:1273:5: note: template bool std::operator==(const std::vector&, const std::vector&)
/usr/include/c++/4.6/ext/new_allocator.h:123:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::new_allocator&, const __gnu_cxx::new_allocator&)
/usr/include/c++/4.6/bits/stl_iterator.h:805:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::__normal_iterator&, const __gnu_cxx::__normal_iterator&)
/usr/include/c++/4.6/bits/stl_iterator.h:799:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::__normal_iterator&, const __gnu_cxx::__normal_iterator&)
In file included from /usr/include/c++/4.6/mocha:5:0, from error_code.cpp:2:
/usr/include/c++/4.6/bits/stl_algo.h: In function ‘_RandomAccessIterator std::__find(_RandomAccessIterator, _RandomAccessIterator, const _Tp&, std::random_access_iterator_tag) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator, std::vector > >, _Tp = int]’:
/usr/include/c++/4.6/bits/stl_algo.h:4403:45: instantiated from ‘_IIter std::find(_IIter, _IIter, const _Tp&) [with _IIter = __gnu_cxx::__normal_iterator, std::vector > >, _Tp = int]’
error_code.cpp:8:89: instantiated from here
/usr/include/c++/4.6/bits/stl_algo.h:162:4: error: no match for ‘operator==’ in ‘__first.__gnu_cxx::__normal_iterator::operator [with _Iterator = std::vector, _Container = std::vector >, __gnu_cxx::__normal_iterator::reference = std::vector&]() == __val’
/usr/include/c++/4.6/bits/stl_algo.h:162:4: note: candidates are:
/usr/include/c++/4.6/bits/stl_pair.h:201:5: note: template bool std::operator==(const std::pair&, const std::pair&)
/usr/include/c++/4.6/bits/stl_iterator.h:285:5: note: template bool std::operator==(const std::reverse_iterator&, const std::reverse_iterator&)
/usr/include/c++/4.6/bits/stl_iterator.h:335:5: note: template bool std::operator==(const std::reverse_iterator&, const std::reverse_iterator&)
/usr/include/c++/4.6/bits/allocator.h:122:5: note: template bool std::operator==(const std::allocator&, const std::allocator&)
/usr/include/c++/4.6/bits/allocator.h:127:5: note: template bool std::operator==(const std::allocator&, const std::allocator&)
/usr/include/c++/4.6/bits/stl_vector.h:1273:5: note: template bool std::operator==(const std::vector&, const std::vector&)
/usr/include/c++/4.6/ext/new_allocator.h:123:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::new_allocator&, const __gnu_cxx::new_allocator&)
/usr/include/c++/4.6/bits/stl_iterator.h:805:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::__normal_iterator&, const __gnu_cxx::__normal_iterator&)
/usr/include/c++/4.6/bits/stl_iterator.h:799:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::__normal_iterator&, const __gnu_cxx::__normal_iterator&)
/usr/include/c++/4.6/bits/stl_algo.h:4403:45: instantiated from ‘_IIter std::find(_IIter, _IIter, const _Tp&) [with _IIter = __gnu_cxx::__normal_iterator, std::vector > >, _Tp = int]’
error_code.cpp:8:89: instantiated from here
/usr/include/c++/4.6/bits/stl_algo.h:166:4: error: no match for ‘operator==’ in ‘__first.__gnu_cxx::__normal_iterator::operator [with _Iterator = std::vector, _Container = std::vector >, __gnu_cxx::__normal_iterator::reference = std::vector&]() == __val’
/usr/include/c++/4.6/bits/stl_algo.h:166:4: note: candidates are:
/usr/include/c++/4.6/bits/stl_pair.h:201:5: note: template bool std::operator==(const std::pair&, const std::pair&)
/usr/include/c++/4.6/bits/stl_iterator.h:285:5: note: template bool std::operator==(const std::reverse_iterator&, const std::reverse_iterator&)
/usr/include/c++/4.6/bits/stl_iterator.h:335:5: note: template bool std::operator==(const std::reverse_iterator&, const std::reverse_iterator&)
/usr/include/c++/4.6/bits/allocator.h:122:5: note: template bool std::operator==(const std::allocator&, const std::allocator&)
/usr/include/c++/4.6/bits/allocator.h:127:5: note: template bool std::operator==(const std::allocator&, const std::allocator&)
/usr/include/c++/4.6/bits/stl_vector.h:1273:5: note: template bool std::operator==(const std::vector&, const std::vector&)
/usr/include/c++/4.6/ext/new_allocator.h:123:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::new_allocator&, const __gnu_cxx::new_allocator&)
/usr/include/c++/4.6/bits/stl_iterator.h:805:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::__normal_iterator&, const __gnu_cxx::__normal_iterator&)
/usr/include/c++/4.6/bits/stl_iterator.h:799:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::__normal_iterator&, const __gnu_cxx::__normal_iterator&)
/usr/include/c++/4.6/bits/stl_algo.h:170:4: error: no match for ‘operator==’ in ‘__first.__gnu_cxx::__normal_iterator::operator [with _Iterator = std::vector, _Container = std::vector >, __gnu_cxx::__normal_iterator::reference = std::vector&]() == __val’
/usr/include/c++/4.6/bits/stl_algo.h:170:4: note: candidates are:
/usr/include/c++/4.6/bits/stl_pair.h:201:5: note: template bool std::operator==(const std::pair&, const std::pair&)
/usr/include/c++/4.6/bits/stl_iterator.h:285:5: note: template bool std::operator==(const std::reverse_iterator&, const std::reverse_iterator&)
/usr/include/c++/4.6/bits/stl_iterator.h:335:5: note: template bool std::operator==(const std::reverse_iterator&, const std::reverse_iterator&)
/usr/include/c++/4.6/bits/allocator.h:122:5: note: template bool std::operator==(const std::allocator&, const std::allocator&)
/usr/include/c++/4.6/bits/allocator.h:127:5: note: template bool std::operator==(const std::allocator&, const std::allocator&)
/usr/include/c++/4.6/bits/stl_vector.h:1273:5: note: template bool std::operator==(const std::vector&, const std::vector&)
/usr/include/c++/4.6/ext/new_allocator.h:123:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::new_allocator&, const __gnu_cxx::new_allocator&)
/usr/include/c++/4.6/bits/stl_iterator.h:805:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::__normal_iterator&, const __gnu_cxx::__normal_iterator&)
/usr/include/c++/4.6/bits/stl_iterator.h:799:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::__normal_iterator&, const __gnu_cxx::__normal_iterator&)
/usr/include/c++/4.6/bits/stl_algo.h:174:4: error: no match for ‘operator==’ in ‘__first.__gnu_cxx::__normal_iterator::operator [with _Iterator = std::vector, _Container = std::vector >, __gnu_cxx::__normal_iterator::reference = std::vector&]() == __val’
/usr/include/c++/4.6/bits/stl_algo.h:174:4: note: candidates are:
/usr/include/c++/4.6/bits/stl_pair.h:201:5: note: template bool std::operator==(const std::pair&, const std::pair&)
/usr/include/c++/4.6/bits/stl_iterator.h:285:5: note: template bool std::operator==(const std::reverse_iterator&, const std::reverse_iterator&)
/usr/include/c++/4.6/bits/stl_iterator.h:335:5: note: template bool std::operator==(const std::reverse_iterator&, const std::reverse_iterator&)
/usr/include/c++/4.6/bits/allocator.h:122:5: note: template bool std::operator==(const std::allocator&, const std::allocator&)
/usr/include/c++/4.6/bits/allocator.h:127:5: note: template bool std::operator==(const std::allocator&, const std::allocator&)
/usr/include/c++/4.6/bits/stl_vector.h:1273:5: note: template bool std::operator==(const std::vector&, const std::vector&)
/usr/include/c++/4.6/ext/new_allocator.h:123:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::new_allocator&, const __gnu_cxx::new_allocator&)
/usr/include/c++/4.6/bits/stl_iterator.h:805:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::__normal_iterator&, const __gnu_cxx::__normal_iterator&)
/usr/include/c++/4.6/bits/stl_iterator.h:799:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::__normal_iterator&, const __gnu_cxx::__normal_iterator&)
/usr/include/c++/4.6/bits/stl_algo.h:182:4: error: no match for ‘operator==’ in ‘__first.__gnu_cxx::__normal_iterator::operator [with _Iterator = std::vector, _Container = std::vector >, __gnu_cxx::__normal_iterator::reference = std::vector&]() == __val’
/usr/include/c++/4.6/bits/stl_algo.h:182:4: note: candidates are:
/usr/include/c++/4.6/bits/stl_pair.h:201:5: note: template bool std::operator==(const std::pair&, const std::pair&)
/usr/include/c++/4.6/bits/stl_iterator.h:285:5: note: template bool std::operator==(const std::reverse_iterator&, const std::reverse_iterator&)
/usr/include/c++/4.6/bits/stl_iterator.h:335:5: note: template bool std::operator==(const std::reverse_iterator&, const std::reverse_iterator&)
/usr/include/c++/4.6/bits/allocator.h:122:5: note: template bool std::operator==(const std::allocator&, const std::allocator&)
/usr/include/c++/4.6/bits/allocator.h:127:5: note: template bool std::operator==(const std::allocator&, const std::allocator&)
/usr/include/c++/4.6/bits/stl_vector.h:1273:5: note: template bool std::operator==(const std::vector&, const std::vector&)
/usr/include/c++/4.6/ext/new_allocator.h:123:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::new_allocator&, const __gnu_cxx::new_allocator&)
/usr/include/c++/4.6/bits/stl_iterator.h:805:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::__normal_iterator&, const __gnu_cxx::__normal_iterator&)
/usr/include/c++/4.6/bits/stl_iterator.h:799:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::__normal_iterator&, const __gnu_cxx::__normal_iterator&)
/usr/include/c++/4.6/bits/stl_algo.h:186:4: error: no match for ‘operator==’ in ‘__first.__gnu_cxx::__normal_iterator::operator [with _Iterator = std::vector, _Container = std::vector >, __gnu_cxx::__normal_iterator::reference = std::vector&]() == __val’
/usr/include/c++/4.6/bits/stl_algo.h:186:4: note: candidates are:
/usr/include/c++/4.6/bits/stl_pair.h:201:5: note: template bool std::operator==(const std::pair&, const std::pair&)
/usr/include/c++/4.6/bits/stl_iterator.h:285:5: note: template bool std::operator==(const std::reverse_iterator&, const std::reverse_iterator&)
/usr/include/c++/4.6/bits/stl_iterator.h:335:5: note: template bool std::operator==(const std::reverse_iterator&, const std::reverse_iterator&)
/usr/include/c++/4.6/bits/allocator.h:122:5: note: template bool std::operator==(const std::allocator&, const std::allocator&)
/usr/include/c++/4.6/bits/allocator.h:127:5: note: template bool std::operator==(const std::allocator&, const std::allocator&)
/usr/include/c++/4.6/bits/stl_vector.h:1273:5: note: template bool std::operator==(const std::vector&, const std::vector&)
/usr/include/c++/4.6/ext/new_allocator.h:123:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::new_allocator&, const __gnu_cxx::new_allocator&)
/usr/include/c++/4.6/bits/stl_iterator.h:805:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::__normal_iterator&, const __gnu_cxx::__normal_iterator&)
/usr/include/c++/4.6/bits/stl_iterator.h:799:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::__normal_iterator&, const __gnu_cxx::__normal_iterator&)
/usr/include/c++/4.6/bits/stl_algo.h:190:4: error: no match for ‘operator==’ in ‘__first.__gnu_cxx::__normal_iterator::operator [with _Iterator = std::vector*, _Container = std::vector >, __gnu_cxx::__normal_iterator::reference = std::vector&]() == __val’
/usr/include/c++/4.6/bits/stl_algo.h:190:4: note: candidates are:
/usr/include/c++/4.6/bits/stl_pair.h:201:5: note: template bool std::operator==(const std::pair&, const std::pair&)
/usr/include/c++/4.6/bits/stl_iterator.h:285:5: note: template bool std::operator==(const std::reverse_iterator&, const std::reverse_iterator&)
/usr/include/c++/4.6/bits/stl_iterator.h:335:5: note: template bool std::operator==(const std::reverse_iterator&, const std::reverse_iterator&)
/usr/include/c++/4.6/bits/allocator.h:122:5: note: template bool std::operator==(const std::allocator&, const std::allocator&)
/usr/include/c++/4.6/bits/allocator.h:127:5: note: template bool std::operator==(const std::allocator&, const std::allocator&)
/usr/include/c++/4.6/bits/stl_vector.h:1273:5: note: template bool std::operator==(const std::vector&, const std::vector&)
/usr/include/c++/4.6/ext/new_allocator.h:123:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::new_allocator&, const __gnu_cxx::new_allocator&)
/usr/include/c++/4.6/bits/stl_iterator.h:805:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::__normal_iterator&, const __gnu_cxx::__normal_iterator&)
/usr/include/c++/4.6/bits/stl_iterator.h:799:5: note: template bool __gnu_cxx::operator==(const __gnu_cxx::__normal_iterator&, const __gnu_cxx::__normal_iterator&)
http://ideone.com/T9tLY2
Для студии был сплоит, основанный точно на таком же принципе.
int n=2;
if(n=1,2,3,4){
cout<<"Ok";
}
срабатывает как истина и выводит Ok?
Потому что учи синтаксис, долбоеб.
Почему не меняет? Тут же оператор сравнения ==, а не присваивания. В чём тонкость?
Суть в том, что препод сейчас сказала, что один чувак с первого курса с помощью этой конструкции как-то сделал так, что if работал как switch. Как именно - она не помнит, но вложенности там не было.
Алсо, можешь своей преподше дебильной в рот нассать, пезды не могут в погромирование.
Именно. Или у того хуесоса, про которого она говорит, по стечению обстоятельств код работал верно, хоть и был ошибочным (например, переменная n всегда была равна 1, если брать твой пример).
Посоны, чего написать джуну для портфолио? Знание каких технологий обязательно, кроме основ? Кути, бусты обязательны для джуна?
Я сам жабоблядок, на работу не берут нихуя. Думаю обмазаться крестами, хули делать.
О, заинтересовался. Бамп вопросу. Что вообще надо на крестоджуна знать?
Борду напиши, азаза. Так то было бы и не азаза, но заебешься объяснять потом зашоренным дебилам. В какой области хочешь работать, для той и пиши. Для десктопа, например, очевидный текстовый редактор (что-то уровня Notepad++, без лишних перделок).
Фреймворк хотя бы один надо изучить. Как без них то вообще что-то можно писать? Это ж велосипед на велосипеде выходит.
Ну и раз уж тебя на жабе не берут, то на крестах не возьмут и подавно, это тебе не в XML конфиги прописывать, тут все серьезнее и порог вхождения выше.
> Кути, бусты обязательны для джуна?
Вообще зависит от вакансии, но если ты собрался писать для портфолио то нужны. Врядли ты что-то напишешь без них. Можно конечно WinAPI использовать, но скорее всего на тебя будут показывать пальцами и смеяться. Если собираешся погружатся в кресты то лишними они не будут, особенно буст.
А если парсер капчи написать? Норм будет? Чейто текстовый редактор не интересно, а борду клепать долго.
нахуя ты спрашиваешь, если у самого идеи есть
вангую, что ты просто петушок, который ничего не напишет.
Байтоебы, сэр.
Нет, тут же приличное общество, зачем здесь семёнить?
Не все, а только я. Тому що не нравится этот тред (из-за толп студентов-дегенератов). Хочется помогать адекватным людям, которым интересно, которые хотят учиться, а вместо этого что? Долбоебы со своими лабами, не могущими синтаксис загуглить.
Кек. А я вот пилю решалку систем линейных уравнений методом итераций.
inb4: Уебывай студентоблядь.
Решил по фану запилить. Сейчас правда какая-то ошибка сверхъестественная.
Собранная ms компилятором программа правильно.
Собранная Gcc компиляторо программа работает неправильно.
Если запустить вторую программу в режиме дебагенга она опять начинает работать, как надо.
Ну тогда только хардкор, только логирование ручками в консоль через строчку.
Ну вот я сейчас этим и буду заниматься. Загуглил - ничего внятного не нашел.
Код давай. У меня первокур один такой был, тоже у него в дебаге работало, а в релизе падало. Оказалось, что какое-то обоссанное мелкомягкое расширение синтаксиса использовалось, типа new int[] (именно так, без указания размера). Так что давай свой код.
https://github.com/nukede/iteration_method
Бля, только не хуесосьте. Проблема в методе isSeriesConveres(). Там переменная summ растет, хотя в конкретно случае должна уменьшаться.
Не, в этом году сам только выпускаюсь. Но поскольку я уже работаю в том же универе, попросили студента подучить, чтоб проект один ему передать, который до этого я пилил. Курс погромирования, увы, крайне убогий и бесполезный, формочки мышкой на дельфях и все.
Так, блять. Какого хуя ты творишь?
Посмотри на SIM::SetMatrixA() для начала. На цикл, где ты память выделяешь.
Я это 5 минут назад дописал. На github лежит версия, которая работала только в msvs. Просто я решил побрать под gcc и обосрался.
Нет, я понимаю, что я обосрался, как только написал свой первый hello_world и вообще мне в макдак пора, но пока хочется, чтобы программка заработала.
for (int count = 0; count < this->numberOfVarialbes; count++)
{ this->matrixA[ count ] = new double[ count ]; }
Ты выделяешь count памяти на каждый массив, а потом работаешь с matrixA, как если бы выделил numberOfVarialbes. И так везде.
this->matrixA[ count ] = new double[ this->numberOfVariables ]
Ну или если тебе и не нужно столько памяти, то поправь все места, где ты с массивами работаешь.
new double[ numberOfVarialbes ]
Двачую. Там еще в buildIterativeForm такая же ошибка. Я удивлен, что оно вообще хоть как-то работает.
Да я знаю. Просто изначальный вариант у меня очень годно вписывался в обычные сишные массивы и не хотелось работать с вектором. Плюс я из си пришел, и векторы меня немного смутили.
>>448820
А, блядь, я понял где ошибка.
Я типа создавал массивы
Первый массив - 1 элемент
Второй массив - 2 элемента
etc.
А надо
Первый массив - n элементов
Второй массив - n элементов
Ну и да, голые массивы выкинь к хуям, используй контейнеры, vector, list, например. Базарю, еще захочешь.
Пока писал эту программу открыл для себя море всяких охуенных вещей.
>>448831
>используй контейнеры, vector, list, например.
Я перепишу в ближайшее время. Как сказал выше, я просто переписывал эту пограмму с классом, поэтому решил не сильно отходить от первой версии программы.
Мне там кто-то звездочку поставил. Теперь буду его своим говнокодом развлекать. Лол.
Мелкомягкий компилятор вообще весьма странно работает с памятью. У него там своя атмосфера.
Хуй знает. Мне мой знакомый, который йоба плюсовый программер, сказал, чтобы я дрочил visual studio. Может стоит подключить GCC к ней?
Хочу в перспективе прикрутить окошечки. Какие GUI будет лучше использовать с точки зрения востребованности, лол? На чем нынче в ынтерпрайзе окошки рисуют?
А как насчет веб-движков? Я вот смотрю и вижу, что у меня дохуя софта использует какой-нибудь вебдвижок - skype, msvs, etc.
Попробуй clang, они вроде уже выкатили поддержку.
По IDE - либо студия, либо vim, лол. Под пердоликс не видел требований конкретной ide.
Про особенности работы с памятью в студии - есть debug new, есть обнуление выделяемой памяти по new[], что не оговорено стандартом.
Или ты имел в виду просто контент в десктоп-приложении отобразить? Ну гугл говорит, есть такая хуйня: http://doc.qt.io/qt-5/qtwebview-index.html
Хотя блять, это же только на мобилах. Тогда хуй знает, я сам QT не юзал.
Кодблокс, силайон, нетбинс, qt ide. Много их. Но студию требуют из-за mfc/atl/wtl. На пердоликсе таких требований нет.
Не буду писать. Он тут где-то сидит. Тут и познакомились. Да и он во мне разочаровался, хмык.
>>448844
А чем плохо? Сверстал заебатый интерфейс на html/css/js и прикрутил к программке. Любая веб-макака разберется. Просто сколько я не видел QT приложений средней руки везде очень косячно реализован этот QT интерфейс. Вот, вроде бы, все работает, но как-то не так. Подобное ощущение было с Anki. Не знаю, как у них там сейчас.
>>448848
Он, совместно с gcc, помог найти мне ошибку с выделением памяти.
>>448849
Ну окей. QT, так QT. Хотя может ещё чего-нибудь посмотрю.
>Qt
>Qt
>Qt
>Qt
>Qt
>Qt
>Qt
QT - это QuickTime, плеер такой. Пидоры.
>очень косячно реализован
Ну хуй знает, у меня все нормально. Тебе какие-то парашные приложения попадались.
Алсо,
>Не буду писать.
Вот и не пизди тогда. Я на словах тоже супермен.
>Я на словах тоже супермен.
Ну он не давал свое согласие на распространение данных на сосаче. В любом случае, этому человеку я очень благодарен, а то я бы сейчас сидел бы и клепал формочки для сайтов.
Что-то ты злой. Не выспался? В говно на улице наступил? Не горюй, все наладится.
Ну блять, неужели нельзя писать правильно? Коробит, вот и злой. Нигде блять QT не пишут, везде Qt, нет, будет писать неправильно.
Пробуй GCC.
Как IDE можешь взять CodeBlocks.
Очень удобно для кроссплатформы.
На работке, как раз, хуярю мелкие модули, для к-х необходима работа на маке, лине и шинде.
Даже достаточно копирнуть папку с проектом, чтобы сразу приступить к работе на другой ОС.
Ну и мелких компиль достаточно неприятная вещь, когда пишешь код под несколько ОС.
Доводилось портировать код из студии, жопа горела только так, особенно от рандомных segm fault, ибо накосячено, но компиль сжевал.
Хотя студия охуенная IDE, правда жрёт не в меру, да падает.
>портировать код из студии
Кек. Same shit. Пока переписывал тот калькулятор с поддержкой классов и вообще все по уму - копировал некоторые части. Блядь, не важно зачем. Студия выдавала просто тонны ошибок, которые хуй поймешь, как фиксить. Но лечились они тупо переписыванием того же кода от руки. Пиздос.
Олсо, ещё раз про горшки из прошлого треда. Я тут гуглил за архитектуру приложений и нашел линк -http://www.cplusplus.com/articles/48TbqMoL/
Стоит ли пилить подобное, а потом все остальные части тупо подгружать всякими .dll файлами?
>что делаешь
Имею слабое представление, как работают библиотеки.
>зачем это надо.
Ну это единственная статья по сабжу, которую я смог нагуглить и, которая раскрывает сабж, а не треп о том, какая программа должна быть.
Олсо, пока идей практически нет. Планирую, как и с этим какульятором - тупо реализовывать частями, а там уж, как получится.
Сначала запилю/найду обертку для SQLite и JSON парсер, потом надо придумать как выполнять задачи в определенные моменты времени. Типа, как cron, но только своими руками, что ли. По этому вопрос я вообще ничего не гуглил. Ну и язык садоводов запилить. Он должен быть простым, но очень описательным.
Только если нужно подключать программу, как ПЛАГИН.
На работке кроссплатформенный ядро, к к-му уже подключаются платформозависимые плагины. Что dll, что остальные.
О, вот это вообще тема была бы. Но мне кажется дохуя сложно и сначала надо логику приложения проработать, а то на деле нихуя нет, язык знаю на уровне /память брызжет из всех дыр/, а амбицией дохуя.
Вынесение части приложения в библиотеку нужно тогда, когда там есть функции, которые будут использоваться плагинами.
Все. Просто так, для логического разбиения одного проекта плагины/библиотеки не используются. Это бред и лишнее переусложнение. Раскидывай сырцы по подпапкам и будет тебе логическое разделение, а плагины совсем не для этого. Подразумевается, что без плагина твое подели будет работать так же, как и с ним, только какой-то определенной свистоперделки не будет.
Не ругайся, ну.
У меня сейчас пока нет никаких идей, как организовать структуру проекта. Поэтому я перебираю возможности.
Дед твой выблядок.
Я сейчас за организацию классов. Куда какие пихать и какой функционал им давать. Впрочем, от твоего поста пару идей появилось.
Наверное, надо тупо садиться и пилить.
>организацию классов
А какое отношение имеют плагины и библиотеки к организации классов?
>Наверное, надо тупо садиться и пилить.
Неужели хоть до кого-то дошло.
Ещё можно в статические либы выносить функционал для ускорения сборки и модульного тестирования.
>А какое отношение имеют плагины и библиотеки к организации классов?
Без понятия. Мне в прошлом треде сказали, что я пилю God Object и послали додумывать. Поэтому додумываю гугля "application C++, applicatcion arhitecture".
>Неужели хоть до кого-то дошло.
Ну вот некоторое время назад я запилил программку, которая общается с другой через сокеты виндовые. Это тоже включу в проект. Сегодня вот эту лапшу, которая считает корни СЛАУ. На пути к успеху.
Неправильно гуглишь. Лучше что-то вроде "c++ class hierarchy", "c++ project structure".
Молодец.
Есть код на ассемблере вырванный с помощью ollydbg , нужно перепилить его под gcc. Я пытался осилить несколько статей, они дают очень много инфы которую мой мозг не может осилить, запилите пожалуйста короткий гайдец по быстрому переводу а-ля PUSH EAX -> pushl %eax если я правильно понял
я наврно слишком тупой чтобы понять что ты имеешь ввиду. Если можно, еще раз для дебилов пожалуйста
точнее, я не понимаю что конкретно нужно. Вставить в с++ билдер код ассемблера, скомпилить-????.
Или просто скомпилить проект с меткой objdump -D
Вот поэтому новичкам рекомендуется использовать std::vector и try-catch хотя бы в int main() {}. Сразу словишь out_of_range exception.
int main()
try {
\t//...
\treturn 0;
}
catch (exception& e) {
\tcerr << "error: " << e.what() << '\n';
\treturn 1;
}
catch (...) {
\tcerr << "Oops: unknown exception!\n";
\treturn 2;
}
catch (exception& e) -- это ловит out_of_range и runtime_error. catch (...) -- это ловит всё остальное, кроме аппаратных ошибок. Деление на ноль считается аппаратной ошибкой в C++ , поэтому за делением на ноль придётся следить только самому.
>unsigned int rows = 12; //for example
>int@@ m2 = (int@@)std::malloc(rows @ sizeof(int@));
А дальше напихать в него rows штук строк разной длины? Ну так, прост))
HANDLE hProcThread;
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, PID);
void ta = (void)VirtualAllocEx(hProcess, NULL, 255, MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(hProcess, ta, func, 250, NULL);
void pp = (void)VirtualAllocEx(hProcess, NULL, 255, MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(hProcess, pp, params, 250, NULL);
hProcThread = CreateRemoteThread(hProcess, NULL, NULL, (LPTHREAD_START_ROUTINE)ta, pp, NULL, NULL);
Собственно код. Создается два указателя на выдеенную память в процессе, мы записываем в первый - указатель на функцию, во 2 - указатель на переменные для функции, потом создаем поток выполнрения.
Проблема состоит в том, что указатель на функцию выглядит как (void)(), при этом VirutalAllocEx не может выделить память под ТАКОЙ указатель, а также для создания потока тоже требуется указатель типа void. Как это реализовать ? Первые несколько советов из гугла по запиливанию каста (void)() to (void) приводят к ошибке компиляции. Кто сталкивался? Как справляться с этим.
п.с. в фунцкции создания потока требуется на (void) а LPTHREAD_START_ROUTINE , при этом к этому типу спокойно приводится сам void.
статья - с жука по инъекции кода в ммо гаму.
кода там много не нужно там пара команд
я же описал проблему: мне нужно зарезервировать в процессе участок памяти, скопировать туда функцию на ассеблере и заэкзекутить. Я показал решение описанное в одной годной статье, но она на с++ билдер. В gcc я столкнулся с проблемой - указатель на функцию не имеет вид void*, как это собственно обойти ?
Конвертируй через union. Чтобы запустить код в памяти, надо еще поставить разрешение через VirtualProtectEx
Ссылку давай.
Если ты не заметил, то в том куске кода, что ты скинул, напрочь проебана разметка. Залей его на pastebin.
>указатель на функцию не имеет вид void*
Чет я не понял тебя. Привести указатель к нужному типу, не?
http://ideone.com/nPPN0P
ладн, ща все оформлю как стоило бы.
Я пытаюсь играть с памятью процессов, данные как бы считыват ья научился, следующий этап - иньектирование функций. Учу я это на примере вовчика 3.3.5. Я выдераю нужную функцию из ollydbg, реализую ее как асм вставку в с++ коде. Потом открываю процесс игры - выделяю себе память, копирую в эту память функцию и параметры, потом запускаю поток выполнения функций по указателям. Все бы ничего только указатели на функцию и void - разные вещи. Посему функция выделения памяти в процессе требует void, создание потока требует тип LPTHREAD_START_ROUTINE, однако тип void легко преобрзауется к этмоу типу. А сама функция - точнее указатель на нее - (void)(). Ошибка компиляции итдитп ЧЯДНТ?
http://pastebin.com/B9kAEJgE
http://zhyk.ru/forum/showthread.php?t=207760
http://zhyk.ru/forum/showthread.php?t=414162
Да, те треды. На с++билдер и делфи все вроде преобразуется гладко
Какая ошибка-то? Скопипасти, блять. У меня gcc конструкцию http://pastebin.com/LfEr0dFQ отлично компилирует.
Не поверишь,
void params_2 = (void)(&SimpleVoidF); - работает с предупреждением, а как у тебя скомпилило
void params_1 = (void)SimpleVoidF; понятия не имею
Спасибо уж, не думал что я настолько криворук
Название функции без скобок - уже можно приводить к указателю, & конечно там нахуй не нужен.
target.cpp:105: error: invalid use of member (did you forget the '&' ?)
void func = (void)SimpleVoidF;
^
мда.
Тогда надо &, да. Если внутри класса указатель на его же функцию берешь.
http://pastebin.com/n4iHaM1B
Через цикл с условиями, в приклейтед пример работы наполнения массива и вывода
array.sorted
Зачем тогда if else нужны вообще, кроме многократной вложенности. Взял зафигачил в одну строчку три возможных условия.
Т.е. я хотел сказать, что если всегда есть арифметическое действие как для if, так и для else, не лучше ли arithmetic if фигачить в таком случае.
Не лучше. Получается нечитаемая дрисня вместо кода, если действия достаточно длинные, типа
(a == b && c == d) ? longObjectName->someShit(shittyArgument)->pssssss(a, b, c, d, e, f, yourMum) : fuckingYourMum(Mum::Ass | Mum::Vagina).cumOnFace(2);
Это не говоря уже о том, что два действия ты в одну ветку не запихнешь, и действия с разным типом возвращаемого значения тоже.
Я про в случае абсолютно одинакового действия и абсолютно одинакового типа.
Просто или писать отдельную функцию на экран с ветвлениями, или три строчки по три вложенных арифметических ифа с комментариями. Никаких вызовов функций, ничего.
Ну тогда можно и так, но считается, что это менее наглядно (когда бегло просматриваешь код). Хотя я, бывает, сам использую, чтобы не раздувать код почем зря.
Всё-таки сделаю в три строчки.
#include <cmath>
using namespace std;
int f1(int i) {
i=2;
return i;
}
int main () {
int i =1;
f1(i);
int f1_result = f1 (i);
cout<<i<<endl;
return 0;
}
Не работали глобальные переменные, решил проверить на тривиальном примере, всё равно не пашет.
подскажите плз (ответ кстати от наличия int f1_result = f1 (i ); не зависит), только начал учить программирование
На экран выводит "1", а не "2", то есть функция не возвращает значение аргумента.
Лол.
ГЛОБАЛЬНАЯ = переменная определенная глобально, т.е. ты можешь получить доступ к ней из любой части программы.
Переменная, объявленная в теле функции, считается локальной.
>>450340
Ну так ты посмотри на код внимательно.
1. Определяешь переменную i = 1.
2. Определяешь переменную f1_result.
3. Передаешь в качестве параметра в функцию f перменную i.
4. ВЫВОДИШЬ ПЕРЕМЕННУЮ I.
Если ты хочешь модифицировать переменную i, то либо объяви её глобально, либо передай на неё указатель.
Да, забыл прокомментировать. Ты пишешь
f1(int i) -- это ты объявил ЛОКАЛЬНУЮ переменную внутри функции i. И ты её возвращаешь.
Как же вы заебали, читайте книжки.
Поддвачну этого сажееба. В книжках обычно есть целая куча показательных примеров. Если этого не хватило - интернет в помощь.
В каждом тредике раз за разом спрашивают какой-то треш, который на первых 10 страницах в любом учебнике написано.
Куда интересней обсуждать какие-то ошибки. Да.
>>448799 -мимо обосравшийся.
Уже два фоловера, лол.
В глаза ебешься?
"See type_index for a wrapper class that adapts type_info values to make them copyable and indexable with standard hash values."
http://pastebin.com/vb73aktN
struct Polygon
{
vector<Point> points;
...
};
Как проще всего сделать так, чтобы у меня появился конструктор, который мог принимать бы в качестве параметров произвольное количество точек?
Думал про variadic function, но там, как я понимаю, не обойтись без передачи еще и количества точек в конструктор, а без этого можно как-нибудь сделать?
Крестопетухи должны страдать.
Скорее всего какие-то флаги надо передать компилятору. Смотри тут: https://2ch.hk/pr/res/441690.html#448305
если я все правильно понимаю, %0 - первая переданная после : переменная, %1 - 2я ?
-std=c++11 для 11
-std=c++14 для 14
Но вроде в gcc 14 пока нет, а в clang - есть, но со стандартной библиотекой от gcc не работает, так что у меня 14 работает только через кланг -std=c++11 -stdlib=libc++
{
case 1: //lala
case 2: //lalala
case 3: //ololo
default: //something
}
Свитч от i-того элемента массива. Стоит завести отдельную переменную int temp = i-тый элемент массива или нет? Важна скорость.
Данный свитч находится в цикле порядка миллиона раз.
если пишу -std=c++11 ругается на неизвестную команду.
если -std=c++0x то сам не понимаю что значит "0x"
Если эта переменная не изменяется в кейсах, то компилятор все сам сделает
Обнови до 4.7.*
О заебись, умный какой конпелятор. Спасибо.
Усложним вопрос.
switch(abs(arr [ i ] ))
{
case 1: //lala
case 2: //lalala
case 3: //ololo
default: //something
}
Свитч от модуля i-того элемента массива. Стоит завести отдельную переменную int temp = abs( i-тый элемент массива ) или нет? Важна скорость.
Данный свитч находится в цикле порядка миллиона раз, как и прежде. Никаких дополнительных чтений/изменений к собственно массиву внутри кейсов/дефолта нет.
9смех0
>>450682
Спасибо, я просто реально не понимаю, в какие моменты компилятор способен оптимизировать, а в какие нет. Какие вещи формально просто задать, а какие нет.
Какой код из условий, например, компилятор догадается может соптимизировать до уровня свитчей, или это принципиально первышает полномочия оптимизации.
[E2094 'operator+=' not implemented in type 'AnsiString' for arguments of type 'TStrings'
void __fastcall TForm4::Button2Click(TObject *Sender)
{
int i;
AnsiString s;
{
s="Select";
for (i=0;i<CheckListBox1->Count-1;i++)
{
if (CheckListBox1->Checked)
s+=CheckListBox1->Items;
Edit1->Text=s;
}
}
}
Пошел на хуй, спепмоклоун. Потрудись хотя бы включить мозг и изучить основы языка.
Винапи уже советовали? Еще рекомендую посмотреть в сторону ассемблерных вставок - очень легковесно, самое то для школооптимизатора.
Не туда видимо попал, спасибо за понимание, и вам всего хорошего
Полигон это 3 точки. 4 это квад, 2 это линия. Нахуя тебе vector вообще? Используй std::array.
Поссал на хуесоса.
Компилято способен оптимизировать все rvalue, так что всякие нанооптимизации вроде вынести переменную - бред сивой кобылы. Оптимизируй алгоритмы и пиши грамотный код, а не занимайся всякой херней.
JavaFX
Спасибо, я то думал, почему 16777216, выводит.
У меня, видимо по счастливой случайности все байты были по нулям. Но спасибо за совет, приму к сведению.
Это не трудно объяснить...
Учитель застрял в 98,
если не подключаем <conio.h>
бьет розгами смерти
Чувство ненависти мне вообще не знакомо, ты не прав. И до шинды мне дела нет, но вот такие дегенераты как он в подавляющем числе случаев используют шинду. Их лучше в детстве топить. Испытываешь ли ты ненависть к комару, который докучает своим глупым жужжанием в бесплодных попытках тебя укусить? Вряд ли. Ты просто хочешь, чтобы он улетел или перестал жужжать. Проще всего его прихлопнуть для этого, либо прогнать. Против остальных виндузятников ничего не имею.
>>450814
Ну кому ты пиздишь. Пикрелейтед.
std::string filename = "test";
std::basic_ofstream<uint8_t> ost(filename);
Имеется файл, в котором заполнены 54 байта. Я хочу записать ещё 1024 байта, которые выглядят так: 0 0 0 0 1 1 1 0 2 2 2 0 ... 254 254 254 0 255 255 255 0.
Массив uint8_t* вручную проверил с помощью std::cout, он действительно такой.
Что пишется в файл c 54 по 1077 байт (54 + 1024 = 1078), если просмотреть 16-ричным редактором:
http://pastebin.com/5AbSj5fa
И далее идёт нормально до конца вплоть до ff ff ff 00.
P.S. Попробовал писать в новый файл - та же фигня, ошибка именно 0d 0a 0d 0a 0d 0a 00 .
И сам догадался. У меня вопрос, почему такая херня творится? 10 символ - это новая строка. Что происходит, оно почему-то пишет 13, а затем новую строку?
Спасибо. Хорошо, что на простом примере наебнулся, а то искал бы ошибку в массиве на миллион элементов.
Естественно, буду использовать бинарный режим всегда, когда нужно побитово скопировать.
Ты на дату смотри. Кроме одной бесполезной фичи все поддерживается.
В программе идет ввод данных, а потом переходим в функцию и оттуда программа заканчивается.
Также как и обычной функции.
То есть и в функции и в программе делать "Конец"? Она ничего не возвращает жеж
Или в функции оставить
Темы для вопросов на собеседовании на должность C++-программиста:
Всё о наследовании за 3 минуты (зачем нужно, множественное, виртуальное, публичность).
Что такое pure virtual function (зачем надо). «Контракты» в качестве бонуса.
Vtbl, vptr, и прочие детали реализации. Бонус за множественное наследование. Бонус за виртуальное наследование.
Конструкторы, деструкторы, порядок создания и удаления.
Виртуальные функции в конструкторах.
Шаблоны (зачем нужны, что такое специализация, что с производительностью).
Исключения (зачем нужны, производительность, особенности реализации).
new супротив new[] – зачем нужны, особенности реализации.
STL (зачем). Бонус за историческую справку. За 3 минуты о производительности основных типов.
Для любого (вставить «нужное») описать сайд-эффекты, когда не работает и почему. Бонус про «без сайдэффектов».
А вы разбираетесь в C++?
Не, ну а что? Хороший мануал, по которому я готовлюсь.
Сорта говна
Продолжай учить и поймешь.
Ну бля, нельзя было скзать про char16_t.
Задание: Передвинуть элементы массива a размерности n таким образом, чтобы элемент с индексом new_0 стал начальным, и вернуть индекс, который получил элемент, бывший начальным.
Пусть массив a[5] = {1,2,3,4,5}
new_ 0 = 2, a[new_0] =3
Как получить массив a = {3,4,5,1,2}?
> невозрастающая пирамида
Если я правильно понимаю это такой массив в котором для каждого i элементы 2i и 2i+1 (если они существуют) меньше либо равны i.
сырцы твоей мамаши
Первый ебет твою мать в жопу, а второй - в рот. Что тебе больше нравится сам выбирай.
Я хуею уже просто с изобретательности природы: это ж надо ТАКИХ даунов порождать.
>>три вращения массива
Спасибо, кэп, но я не понимаю, как именно работает rotate(), какие элементы для этого примера где указывать?
return qapp.exec();
1) Где лучше располагать объекты по дефолту -- в стэке или в куче? Вообще, как понять, где лучше расположить объект?
2) В MVC пользовательский интерфейс это свойство представления или модели? Если каждой модели нужен свой интерфейс, то как это лучше решить архитектурно?
Однохуйственно.
Пользовательский интерфейс это свойство представления.
> модели нужен свой интерфейс
Все тоже самое. Только под каждую модель получится свой view.
короче жи. это для кодгольфа.
Ну и самое главное забыл, конечно же. Чтобы не получать петушиные кукареканья среды КОНСТАНТ ЭКСПРЕШШЕН ИН КОНДИШЕН
1) Оптимизация уровня /b/. У тебя таких циклов будет максимум по одному в каждом потоке.
2) Это что-то как-то верно, но вопросов не будет, если будут адекватные условия. Выходить из цикла ты, скорее всего, будешь по условию, поэтому лучший выход это while ( !finished ).
3) Это вообще пушка.
>2) В MVC пользовательский интерфейс это свойство представления или модели? Если каждой модели нужен свой интерфейс, то как это лучше решить архитектурно?
пользовательский интерфейс --- это скорее всего View+Control
модель всегда едина
>1) Оптимизация уровня /b/. У тебя таких циклов будет максимум по одному в каждом потоке.
Согласен, но что-то должно перевесить в пользу одного из решений. Т.е. выбрать один раз и делать так всегда.
>>451431
>Выходить из цикла ты, скорее всего, будешь по условию, поэтому лучший выход это while ( !finished ).
Если у меня for(;;) , выходить из цикла я буду с помощью return; подразумевается, что я номрально разбиваю код на функции
>3) Это вообще пушка.
Хуюшка.
"tcc.exe tcc\examples\hello_dll.c -LC:\tcc\examples -ldll.dll"
"tcc.exe tcc\examples\hello_dll.c -L'C:\tcc\examples' -ldll.dll"
"tcc.exe tcc\examples\hello_dll.c -LC:\tcc\examples -ldll"
"tcc.exe tcc\examples\hello_dll.c -Ldll"
И получаю одно и то же - либо -ldll не найден либо символ 'HelloWorld'.
Как правильно сделать ЭТО?
> dll на фасме
Натрави на нее tiny_impdef или сам напиши .def-файл. А .def-файл можно либо напрямую линковать (tcc whatever dll.def), либо уже -ldll, если оно в libpath. Алсо, про mangling не забывай.
Я правильно понял, что main.cpp занимается только созданием окошек и прочее, а свою функцию надо в mainwindow.cpp писать, предварительно продекларировав ее в заголовке?
А чем тебе Кьют не Кьют? Собирай статически, особо много лишнего тащить нужно не будет.
И да, на нем можно спокойно писать откуда угодно, Криэйтор это ж IDE. Но из-под него дико удобно, потому что мэйкфайлы сам делает, дизайнер в комплекте, справка в комплекте (а она у Кьюта шикарная), и вся хурма.
Что то не похоже на правильное решение проблемы, а я бы сказал выглядит как костыль.
Почему костыль? Создавать таблицу импорта для PE можно разными способами: "большие" компиляторы (студия, гцц) при сборке DLL генерируют .lib-файлы, содержащие готовые куски таблицы импортов. Эти .lib-файлы ты указывешь при линковке своей программы, а линкер с помощью особой линкерной магии объединяет куски таблиц импортов из .lib-файлов в нужном порядке в одну секцию (импорты в PE под это и затачивались, кстати). Выглядит, как костыль, правда? Алсо, tcc, возможно, поддерживает такие файлы (их обработка ничем не отличается от обработки обычных статических либ, кроме, разве что, прописывания RVA и размера секции импорта в data directory).
Но если не нужны всякие advanced-фичи, можно генерировать таблицу импортов при линковке. Так делают тот же фасм и tcc. Для этого нужен только список функций (символов) и имя DLL. Все это есть в .def файлах. tcc при сборке DLL генерирует, собственно, .dll и соответствующий .def. Для случаев, если .def нет по каким-то причинам (например, .dll собрана не в GCC, как у тебя), в поставку входит tiny_impdef, который перечисляет экспорты указанной .dll и создает .def.
Алсо, я не совсем понимаю, что ты и где гуглил, если пример сборки использования .dll в tcc есть прямо в tcc-win32.txt в дистрибутиве.
Алсо, если тебя что-то не устраивает, можешь просто не использовать встроенный линкер tcc и взять ld, MS link или еще что-нибудь.
Благодарю.
К сожалению ты много магии описал. Есть нечто более конкретное? Например "иди нахуй" или "напиши в консоли то-то и то-то получиш результат".
> более конкретное
tiny_impdef твоядлл.dll -o твойдлл.def
tcc исходник.c твоядлл.def или tcc исходник.c -Lпутькдеф -lтвоядлл
У меня нет работы...
>Я правильно понял, что main.cpp занимается только созданием окошек и прочее
нет, неправильно. во-первых это обычно плюсы (пусть с moc-костылями, но всё же), во-вторых Qt абсолютно не навязывает. если ты новичек в плюсах, то стартовать с кути не стоит, серьезно. продрочи консольку основательно
>а свою функцию надо в mainwindow.cpp писать, предварительно продекларировав ее в заголовке?
короче говоря, если у тебя функция относится к классу, то ее нужно объявлять в классе
>>451601
>писать без Qt Creator
можно писать хоть в виме, это же библиотека
std::unique_ptr< QApplication > utv_app{ new QApplication{ argument_count, arguments } };
Можно ли ее как-нибудь упростить, убрав new? Насколько я помню, списки инициализации как раз ради это отчасти делались.
Нужно добавить в unique_ptr конструктор принимающий список инициализации.
О великий! Благодарю.
http://en.cppreference.com/w/cpp/memory/unique_ptr/make_unique
оказывается оно уже есть, епту
auto utv_app = make_unique<QApplication>( argument_count, arguments );
Че с этим обоссанным ычаном не так? Хули он не вайпается. http://pastebin.com/mDWKJy5u
Wireshark'ом посниффил, все хедеры заданы, все куски формы тоже. Файл прикреплен, капча решена (спасибо анону, который распознавалку на жабе запилил). Хули они, блять.
Какой же я даун, обосрался вот тут, коммент забыл убрать. QHttpMultiPart *mp = new QHttpMultiPart;//(QHttpMultiPart::FormDataType);
Кидайте свои ссаные тряпки мне в рожу.
Есть такой сайт, гуглом называеться.
Спасибо большое.Спокойной ночи
Грубо говоря, if (r4 = 11..19). Т.е. если r4 принимает значения в промежутке от 11 до 19. Как записать этот промежуток синтаксически правильно?
Записывай биты в байт любым удобным способом, затем записывай полученный байт в файл и в самом конце одним байтом запиши количество лишних бит в последнем записанном байте для корректного чтения бит. Возможно проще реализовать битовыми полями, но я их ниразу не юзал.
>(num >= 0) && (fractional == 0.0))
>сравнивать число с плавающей точкой прямым сравнением
Поссал на дебила.
Я не он, но тоже ссу тебе в рот.
http://floating-point-gui.de/errors/comparison/
http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm
Обоссал дебила с шаблонным мышлением. Флоаты, установленные присваиванием, вполне можно сравнивать.
Если, например if ( a > 1.0f ) a = 1.0f, то потом можно if ( a == 1.0f ).
Нет, это ты дебил. У него num - аргумент функции, а не константа. Неизвестно, чему эта переменная равна и как было получено ее значение. И из этой переменной num мы получаем дробную часть, которая, таким образом, тоже неизвестно чему будет равна.
Ты ведь не про пример это запостил. У тебя просто сработало утиное "низя!" на сравнение флоатов. Если бы goto в коде увидел, вообще взорвался бы.
http://pastebin.com/kGcVFZ6p
Почему после ввода длины строки программа не дает мне вводить саму строку?
Если ставить фиксированную длину строки, то такой проблемы нет.
У тебя в входном буфере остается '\n' от предыдущего ввода, getline его читает и останавливается. Перед cin.getline(s, N); добавь cin.get();
Спасибо, анон.
Если бы ты вдался в контекст, в котором это сравнение используется, то понял бы что ты мудила тот еще. Числа вводятся с клавиатуры и нужно было проверить целое число введено или дробное. Но нет, надо сразу обоссать и выебываться как петух перед курицами. Нахуй послан, мамка обоссана.
Еще один вопрос появился, как сравнивать кириллицу?
Нужно узнать сколько слов содержит букву, с латиницей все работает, а кириллицу не воспринимает.
>Числа вводятся с клавиатуры
Чет не нашел этого в коде. сдается мне, ты собственную мамашу обоссал.
А даже если не с клавиатуры. то что? Если сравнивать с дельтой, они от этого целыми станут? Да нихуя подобного. Дробное значит дробное, целое — значить дробная часть РАВНА нулю.
И да, когда я писал ему этот код, то думал про дельту, так что можешь со своими советами пиздовать нахуй.
>И да, когда я писал ему этот код, то думал про дельту, так что можешь со своими советами пиздовать нахуй.
Спасибо за функцию кстати. Хотя я её так и не использовал но на пару мыслей меня она наталкивала.
Обоссыте мою функцию для корректного ввода нужного значения.
http://ideone.com/adk7RK
Блять, хули ты такой тупой. У тебя при операциях с этими ебучими числами может получиться не ноль, хотя в реальном мире там был бы при таких же операциях ноль. Так происходит из-за ограничений точности. Поэтому сравнивать бессмысленно.
Ну тогда может быть. А вообще с инпутом проще сразу введенную строку проверить, чем полагаться на еблю с плавающей точкой. Бывают поехавшие компиляторы, которые весьма своеобразно float оптимизируют, вплоть до того что 0.0 у тебя может внезапно стать не 0.
Есть.
Гениально. Но я ведь не сразу сюда написал...
Латиницу нормально сравнивает, а кириллицу не хочет.
Беда
Dota 2
Какие блять драйвера видеокарты, ты ебанутый? Сразу ведь понятно, что процессор пылью засорился.
#import <Foundation/Foundation.h>
…..
NSString string1 = @"Оп - хуй";
NSString string2 = @"Ты - хуй";
if ([string1 isEqualToString:string2] == YES)
NSLog(@"%@",string2);
else
NSLog(@"%@",string1);
Значит он пустой. Макс и мин элементы не входят в твой массив, и если они находятся рядом друг с другом то массив получается пустой, вероятность этого 18/90. Алсо у тебя там в цикле копирования массива неправильное количество итераций из-за чего последний елемент не копируется, должно быть i<finish
Алло, это конкурс юмористов?
switch (r4)
{
case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19:
return true;
default:
return false;
}
Надо же, на такой очевидной вещи проебал все полимеры. Спасибо тебе, добрый анон.
Подскажите, пожалуйста, имеет ли смысл вообще юзать бесконечные аргументы?
Например мне нужно задавать СТРОКОВЫЕ параметры.
По одному не шибко удобно.
Соответственно удобно было бы использовать что-то похожее на:
void add_param(const string ¶m1, ...);
Ну и юзать уже подобным образом:
add_param("p1", "p2", "p3", nullptr);
nullptr будет обозначать конец листа параметров.
С одной стороны это удобно для добавления. С другой стороны, сколько аргументов без доп. параметра не узнать. Т.е. va_list не даёт размерности. Если используется для хранения параметров тот же вектор, то перевыделения памяти не избежать, без повторного цикла, чтобы отрезёрвить место. А если просить ссылку на вектор с параметрами, то тогда изи, но не очень удобно использовать.
vector<string> vec = {"p1", "p2", "p3"};
add_param(vec);
Какой вариант предпочтительней? И вообще, в каких случаях бесконечные параметры актуальны? Если говорить о плюсах.
Linked list
Если параметры одного типа, то используй std::initializer_list, а если разных, то пиши рекурсивную шаблонную функцию.
http://pastebin.com/EE10XMGu
22-23 строка
Как сделать сравнение с ебаной кириллицей?
https://ideone.com/iKCQjj
Запускаешь в своей системе, смотришь каким кодам соответсвуют нужные буквы, сравниваешь с ними.
Уже пытался
Все равно не работает.
http://pastebin.com/VZfVbkz9
С английскими буквами и символами все нормально.
> char w = 'б';
> char W = 'Б';
Что это за хуйня? Тебе их нужно с клавиатуры ввести. В консольку, или куда ты там пердолишся. У тебя отличаются коды букв в твоем редакторе и в консольном шрифте.
Объявлял, толку нет.
В самой строке косяки с кириллицей. Сделал вывод и вместо русских букв выводятся каракули.
Вот про это я и говорю. Тебе нужно определить какому каракулю соответствует буква 'б' и сравнивать с ним.
Спасибо тебе!
>std::initializer_list
Понял. Нихуя сложного, примерно так и делал обычно.
Т.е. хорошего применения БЕСКОНЕЧНЫМ параметрам не найти?
Ещё есть один вопрос. Связан с шаблонами и коллбэками.
Очень нравится конструктор std::thread, делаю по его примеру.
Как можно не поганить объявление класса подобной хуйнёй:
template<typename Class>
void add_callback(Class _class, void(Class::meth)())
{
callback = std::bind(meth, _class);
}
Можно, конечно, сразу принимать std::function, но выглядит ущербно подобный код. Особенно, если параметром больше, чем 1.
add_callback(std::bind(&MyClass::my_meth, &MyClass, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
Поясни? Хотелось бы на ideone, например.
(!!) . words
Спасибо, сам придумал.
>Записывай биты в байт любым удобным способом
Так вот как? Там же последовательности разной длины. Лишние биты в конце не проблема, нулями заполню.
Я передаю константы, разные по ситуации. Ну и что мне теперь, константы оборачивать в вектор? variadic templates юзать хочу в последний момент
Опиши подробнее что у тебя там происходит. Скорее всего можно как-то переделать архитектуру и избавиться от этой проблемы вообще.
Ну, вообще, да. Все можно переделать лучше. Бывает у меня такое - ебанутые дизайны и всякая хуйня.
Пердолюсь с глобальными ивентами в qt под винду, передаю модиферы MOD_*. Это все можно организовать обычным логическим или
>template<typename T> void foo(T&&);
>When foo is called on an lvalue of type A, then T resolves to A& and hence, by the reference collapsing rules above, the argument type effectively becomes A&.
Правильно ли я понял, что если я пишу такой код
int i = 0;
int &j = i;
foo (i); foo (j); foo (2); Типы будут соответственно int &, int &, int &&? А что если у меня объявлен параметр как const T &&?
> Типы будут соответственно int &, int &, int &&?
Да.
> А что если у меня объявлен параметр как const T &&?
Меня компилятор нах послал с попыткой вызвать эту функцию указанными способами.
http://www.codesynthesis.com/~boris/blog/2012/07/24/const-rvalue-references/
Итак, говноборда.
https://ololoepepe.me/board/b
https://github.com/ololoepepe/ololord
Че изменилось:
Поддержка bbcode: b, i, s, u, spoiler, sub, sup.
Доска /echo/: при создании треда надо указать ссылку на тред с другой борды, он будет во фрейме и развертывается при наведении. Для набегов, например, или для обсуждения.
Подгрузка постов без обновления страницы, а также автообновление.
Тег code на всех досках, также допустимо, например, [c++]...[/c++] или [haskell]...[/haskell].
Удаление поста без обновления страницы.
Исправлено превью постов в хромом брошзере.
Для вемок (WebM) создаются превью.
Постинг асинхронный (через iframe). Если произошла ошибка, не надо все заново вводить.
Картинки открываются в треде как тут, с перетаскиванием и масштабированием. Вемки не двигаются (ебучий жабаскрипт, хуй знает как для вемок это сделать чтоб при этом можно было по кнопкам тыкать).
Кнопка "Пожаловаться" (с сюрпризом, естессна).
Превью загружаемых файлов.
Карта ответов.
Поиск в гугле и на iqdb по картинкам.
Мигание неактивной вкладки с новыми (автоматически подгруженными) постами.
Скачивание всех картинок из треда одним архивом.
Премодерация постов (юзером, не мочой).
Исправлена вставка ссылок на посты.
Дедупликация файлов. Если файл на сервере уже есть (проверка по хешу), он не отправляется. Добавляется, но просто трафик экономится.
* Ну и всякие неинтересные технические детали, типа возможности админу постить голый HTML.
Ебаная макака, какого хуя не работает маркированный список, тварь тупорылая.
Не люблю таки читать с монитора и прибегаю к этому в крайних случаях, но учту, спасибо.
Ты охуенен, конечно, но не лучше ли заставить Абу вернуть поддержку тега code?
У меня есть поток каких-то чисел с большим допустимым диапазоном, например, айпи. Нужно написать штуку, которая быстро бы проверяла, встречалось ли уже такое число. Ввиду огромного количества чисел сделать std::array<bool, 2^32> и смотреть по нему не удается.
Как бы это сделать по-человечески? Основная задача, если что, это поиск количества уникальных встретившихся чисел.
And what?
Сет тут вообще никак не подходит, потому что он не умеет по ключу обращаться. Карта тоже, потому что она четыре охулиарда булей будет вечно перебирать.
Array идеальна, но ее такую большую хрен создашь.
Или ты совсем о чем-то другом?
Битмап для 32 бит будет 512 метров всего. Не так уж и много. А потом биты посчитать не так уж и долго (особенно если проц умеет в какой-нибудь вариант popcnt).
> не хочет
А ты его не спрашивай - выдели сам память и пользуйся, а не еби библиотеки. Если вдруг в адресном пространстве не найдется непрерывной области такого размера, можно ведь и разбить на чанки по 64 МБ, например.
А ты выдели массив uint8_t*, заполненный изначально нулями, и циклом проставляй true, если совпадает хоть с одним ранее из тех что false. Тогда количество всех фолсов это количество уникальных встретившихся чисел.
http://pastebin.com/9bCeLr2n
Кстати, сброс бита (reset bit) именно здесь тебе не нужен. Я так, до кучи его написал.
Не вернет он. Уже сто раз говорил. Да и не в этом соль, а в том, чтоб с вебом поебстись немного.
>>453894
Уже пишу тебе личный апп, канеш. Нет, ну в самом деле, ебнулся что ли? Нахуй это надо. Я еще могу понять апп для тытрубы, он может какой-то прирост к производительности дать, но тут то нафига? Все равно все будет тупо дублироваться. Свистоперделок и так дохуя, а работает вполне быстро на лопате.
Помогите пожалуйста. Как определить, сколько слов в строке чётной длины, используя стандартные строковые функции?
unsigned numberOfWords = 0;
if (str.length())
{
size_t pos = 0;
while (std::npos != (pos = str.find_first_of(" ", pos)))
{
++numberOfWords;
}
}
Ты дебил? Твой высер будет находить в качестве слов подстроки типа "тогда,". Соответственно, длина слова будет больше на 1, чем должна быть, и длина станет нечетной (или наоборот четной). Пиздец, как ты вообще его условия читал?
Про то что нужно длину считать это я не заметил, да. Ну пусть пройдётся циклом и удалит все запятые, хули, как будто это проблема.
ну няши, помогите же))
как найти количество слов чётной длины? кроме пробелов, слова могут быть отделены запятыми, двоеточиями, тире
str.erase(std::remove(str.begin(), str.end(), '.'), str.end());
str.erase(std::remove(str.begin(), str.end(), ':'), str.end());
str.erase(std::remove(str.begin(), str.end(), '-'), str.end());
// ещё какие знаки убрать сам вставишь если надо
vector<string> vecWords = explode(str, ' ');
// код функции explode могу приложить отдельно
unsigned chetnih_slov_chislo = 0;
for each (string word in vecWords)
{
if( word.length() % 2 == 0)
chetnih_slov_chislo++;
}
ну блин(((, я не знаю таких функций, можно как-нибудь без векторов и этих erase? мы просто в универе ещё не проходили это)) мне кажется тут нужно выделять слова с помощью strspn() и strcspn().
Это всё стандартные функции c++, а эти рудименты strspn() и прочие я никогда в жизни не использовал, хз уж как там с ними делать что
static const std::set<char>::iterator _end = delimeters.end();\
\tfor (std::string::iterator it=input.begin(); it!=input.end(); ++it)
if (delimeters.find(*it) == _end) state++;
else;
объясни пожалуйста эти строчки;
что за set, iterator?
Ну вторую строку можно заменить на
for (char it=input; it!=0; ++it)
если вхожной параметр объявить как указатель на char (строка в стиле С). А сет это сет, почитай документацию, я хуй знает чем тебе помочь. Можешь свой навелосипедить, для твоей задачи достаточно просто можно хуевый на массивах сделать, так тебе ограниченый функционал нужен - только статическая инициализация и проверка наличия.
Как без векторов то? На массиве чтоли?
да, через символьный массив, и мне ещё нужно вставить после первого слова заданную подстроку, например ””; помоги пожалуйста)) мне завтра уже надо эту задачу сдать
я не зелень, просто студентота, начавшая изучать прогу только в универе
Ну спасибо, няш :'(
Например, есть
char STR[] = "asd";
в памяти он устроен как-то так -
0 | 'a'
1 | 's'
2 | 'd'
3 | '\0'
Окей, но где тогда хранится сам указатель STR?
То есть, условно говоря, если я запринчу -
printf("%p", a) // - получу 0;
Однако и
printf("%p", &a) // - Я тоже получу ноль.
Как так получается? Указатель на начало массива хранится там же, где и первый элемент? Что за борода?
Например, есть
char STR[] = "asd";
в памяти он устроен как-то так -
0 | 'a'
1 | 's'
2 | 'd'
3 | '\0'
Окей, но где тогда хранится сам указатель STR?
То есть, условно говоря, если я запринчу -
printf("%p", STR) // - получу 0;
Однако и
printf("%p", &STR) // - Я тоже получу ноль;
Как так получается? Указатель на начало массива хранится там же, где и первый элемент? Что за борода?
std::multimap< int, std::pair< int, int >@ > map; std::pair< int, int >@ pair = new std::pair< int, int >( 10, 20 );
map.insert( 10, pair );
@ = указатель
А я тебе говорю не удобно мля
Приложением это совсем другой уровень.
Мобильную версию хотяб надо
Хочу сделать хэшмап, у которого Key - тип, а Value как обычно.
Сейчас есть что-то типа
mymap[std::type_index(typeid(T))];
Мне это не нравится, т.к. громоздко и в рантайме (в рантайме ли?), а могло бы вычисляться во время компиляции и вместо этой строчки просто подставлять нужный адрес.
Хотет что-то типа такого
mymap.get<T>();
Полагаю, что нужно копать в сторону template и constexpr (которого в 2013 студии нет блджад).
Что можете посоветовать?
А хули он условия так говенно пишет?
>сколько слов в строке чётной длины
>в строке чётной длины
Строка четной длины, блять. Нехуй через жопу писать, будет и нормальный ответ.
Ну хуй знает. Мне все норм. Что конкретно тебе неудобно? Может это все исправляется легко.
>>454482
Пссссс. Пояснил прямо в ротешник.
>>454487
Два словаря, например. Возможно, один или оба на основе хеша.
>>454499
>std::type_index(typeid(T))
std::type_index t<T>() { return std::type_index(typeid(T)); }
mymap[t<T>()];
>>454505
Это ты читаешь жопой просто. Хз как можно было именно так понять.
>>454477
>не работает
В розетку воткнул? Процессор прочистил?
А можно ли как-то в случае std::map быстро найти id (то есть, номер элемента с начала карты), имея в руках его ключ?
>std::type_index t<T>() { return std::type_index(typeid(T)); }
mymap[t<T>()];
Жопочтец, мне нужен compile-time хэшмап, а не это говно.
Когда тебе нужно модифицировать указатель.
Ссылки нинужны. Просто они безопасней.
Ссылки не нужно проверять на NULL.
Да это для долбоебов все. Которые высирают вот такое говно: http://pastebin.com/kBD8Ct4d
Если дрочить вприсядку и сосать собственный хуй, то действительно можно напороться на проблемы переносимости.
В pInt записывается адрес переменной pC, потом к нему прибавляется 1 и pChar получает строку по новому адресу? Там будет смещение на 1 символ? Что за хуйня?
Ну почему компилятор пишет, что array - это char и выкидывает исключение?
Если я правильно понял, это происходит из-за того, что я сравниваю символ с разыменованным указателемa == (array+i) - можно так записать на элемент символьного массива. А как тут этого избежать-то? Как жить, что делать?
> break
> flag = true
Проиграл. Какое исключение? Прочитай какое оно, вот возми и прочитай. Возможно у тебя сегфолт из-за того что ты вылез за буфер.
Не /0, а \0
Размер int в общем случае не равен размеру char. Как правило (на 32-битных системах) это 4 и 1 байт, соответственно. Дальше сам сообразишь, что произойдет.
посоны, подскажите примерный алгоритм, как в символьном массиве выделить слова и узнать их чётность? как посчитать сколько слов чётной длины, а сколько нечётной?
Давай рассуждать логически. Если создается копия, то создается новый объект. Что происходит (или что вызывается) при создании объекта? Вот и ответ.
QString s = "мамку твою в жопу ебал, пидор";
QStringList words = s.split(QRegExp("\\W+"), QString::SkipEmptyParts);
int even = 0;
int odd = 0;
foreach (const QString &w, words) {
if (w.length() % 2)
++odd;
else
++even;
}
qDebug() << "четных:" << even;
qDebug() << "нечетных:" << odd;
QString s это структура? s.split это что?
А можно как-нибудь в символьном массиве всё это сделать? ну то есть дан char array[], и в нём есть слова и знаки препинания. Подскажи хотя бы примерный алгоритм))
Сиськи давай
Если объект является rvalue и, как аргумент, имеет модификатор const, то может и не создаваться и н вызываться.
Он же написал что создается, вопрос был про вызов конструктора.
A в твоём случае и есть указатель на первый элемент.
Волею судеб надо разобратьсь с куском говна на крестах, запись в файл, конкретно.
В куске кода отвечающего за запись документа в файл, вызывается [int _write] функция из файла write.c 10й вижлы.
Пробежался по ней дебагом, она доходит до винапишной функции
BOOL WINAPI WriteFile(
_In_ HANDLE hFile,
_In_ LPCVOID lpBuffer,
_In_ DWORD nNumberOfBytesToWrite,
_Out_opt_ LPDWORD lpNumberOfBytesWritten,
_Inout_opt_ LPOVERLAPPED lpOverlapped
);
Дальше, видимо, эта функция кидает error. Где мне глянуть код ошибки?
зелень в этом тхреаде(ITT)
Спасибо тебе, очень выручил! Счастьяздоровья, невесту с приданым и коней златозубых в табор!
GetLastError()
(Присваивание не перегружено на сдвиг вправо, сишный код, вставки на плюсах, компилится как плюсы)
Во-первых, то был не я. Во-вторых, ты таки даунина, потому что помимо голых крестов и голой STL (реализация которой, кстати, тоже может на разных платформах и осях отличаться) есть еще чисто системные заголовочники с чисто системными функциями, которые на одной оси есть, на другой нет. Хотя, дауненку, дальше лаба_3 не дошедшему, это невдомек.
Двоеточие ставится, чтобы драйвер оперативной памяти не вызывал замыкание в блоке питания.
Ты ахуел? Я даунёнак только что третью лабу сделал и это знал вот и хули ты пиздишь?
Че ебальник разинул? Пссссс. Нассал тебе туда.
охуенная няшка жи
Сначала показалось, что у неё на соске 2 прыща.
Почему-то на такое решение:
https://ideone.com/SJYAgn
Мне сказали, что хуйня какая-то. На мэйн можете даже не смотреть. Проверял работает ли.
Задача была разбить строку на подстроки по определённому символу.
Что тут не так?
Ну хуй знает. Единственное, чтобы я выпилил - подсчёт количества элементов. Ибо нехуй линейно перебирать всё говно.
Нахуй не нужно, в принципе.
Даже выпилю её.
Еб твою мать, с такой формулировкой задачи все чуть ли не в три строчки делается, а ты говна нагородил. Конечно тебя обоссали. https://ideone.com/jqqeiP
А на богоуровне вот так:
QString str = "твоя;мамаша;хороша;в;постели";
QStringList splitted = str.split( ";" );
Ну, я так понял, ему надо было на голых крестах, стл онли. На кьюте то да, qDebug() << QString("твоя;тоже;вполне;ниче;так").split(';');
Алсо, даже вот так можно сократить, че уж: https://ideone.com/dsqreZ
Анон, я вот учу с++ не первый месяц и у меня скопилось несколько нубских вопросов:
1) Как защитить свою программу от взлома?
2) На чем сделать качественное и красивое GUI? Просматривал статьи по WinAPI но по сравнению с тем же C#, элементы окна выглядят довольно древними.
3) Как грамотно объединить коды двух ЯП, к примеру того же С++ и С#?
1) Современные игры ломают за 3-4 дня. Так что, имхо, лучше не забивай себе голову.
2) Qt.
3) Через библиотеки, очевидно же.
1) Всё равно взломают. Хотя тебе, думаю, подойдёт метод Неуловимого Джо.
2) Не смотри на винапи это слишком тру-способ, не тебе им заниматься. Qt неплох, как говорит >>455445 , но будь готов к тому, что вместе с программой тебе придётся тащить Qt5Core.dll, Qt5Widgets.dll, Qt5GUI.dll и ещё тонны библиотек.
Касательно древних элементов гуя - тут https://msdn.microsoft.com/en-us/library/windows/desktop/bb773175%28v=vs.85%29.aspx написано, как это решать.
3) Использовать из C++ шарповую библиотеку? Компилируешь шарповый код как dll, дальше:
1. Объявляешь в C++-коде необходимую функцию как extern-прототип.
2. Пишешь LoadLibrary, в параметрах указываешь имя dll.
3. Вызываешь GetProcAddress с именем нужной функции, преобразовываешь результат в указатель на объявленную функцию.
Вот статья: http://rsdn.ru/article/baseserv/dlluse.xml
В шарпе из C++ всё несколько проще поэтому не тру. Опять же, компилируешь C++-код в dll, потом просто в шарп-коде пишешь следующее:
[DllImport("Cpplib.dll")] //Это твоя библиотека, которую ты используешь
int MyFunc(); //Это функция, которую ты собираешься использовать из библиотеки. Следи, чтобы совпала по сигнатуре.
Опять же, вот https://msdn.microsoft.com/en-us/library/aa984739%28v=vs.71%29.aspx статья.
Тащить дополнительные библиотеки совершенно не обязательно. Достаточно просто статически слинковать проект. Делается это вот так: http://www.cyberforum.ru/qt/thread234568.html
А нахуй они тебе нужны? Делаешь сборку максимально сложной, выкладываешь исходники без какой бы то ни было документации, и вуаля - почти никто не осилит собрать. GPL не запрещает же продавать, просто надо сырцы выложить.
А зачем тебе LGPL? Если ты собираешься серьезно зарабатывать деньги, то тебя купить Кьют вряд ли заломает. Если же ты опенсорсник, то основной формой распространения все одно будут сырцы.
А не похуй? 10 страниц же, не сотрется.
char* dayOfWeek[] = { "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" }
printf("%s\n", dayOfWeek[dayNumber - 1]);
Поздравляю, бро.
Ток не стань макакой и дропай, если хуйня.
Хуже ничего нет, чем работать не получая удовольствия от результата.
>Хуже ничего нет, чем работать не получая удовольствия от результата.
Есть: работать при этом за доширак.
Дропать и возвращаться к мамке на шею? Нет спасибо.
В худшем случае пострадаю год и буду искать более "по душе".
Отрепортишь потом о первых днях.
Правда он жаба кодер.
Есть один макрос SHITCODE - строка с файлом и числом. __FILE__ разворачивается нормально, а __LINE__ я в строку перегоняю другими макросами, но ничего не получается - в прагму вставляется имя макроса.
msvc компилятор
Очень просто -- нужно перестать в 21-м веке пользоваться говном типа макросов и научиться писать нормальный код.
Как задать вручную двумерных вектор путем перечисления элементов?
Есть какой-нибудь способ задать в коде программы матрицу 3x3, например?
В STL нету стандартного многомерного контейнера. Тебе нужно написать его самостоятельно.
Хотя, в принципе, можно сделать std::map< pair < int, int >, int >.
Чуть более года. Точнее начал изучать сам год назад. Пол года затрачивал синтаксис по мере возможности. Потом начал нормальный поиск работы и дополнительно всяк скользкие места и хитрости.
Что прокатывает? Меня отшили на 3 собеседования и 7 тестовых заданиях по почте. Каждый раз что-то додрачивал, узнавал что нужно подтянуть. Я даже собеседование на трейни провалил. Вот конце-концов пришел, нормально набеседовался и взяли.
Дорогу осилит идущий же.
Пиши комментарий с пятью звездочками подряд или каким-то еще уникальным кодом — и все. Любая нормальная IDE может искать по всему проекту.
Ты меня успокоил. Дрочу дальше.
О, та же фигня, бро. Я сейчас ищу работу в геймдеве — уже две команды отшили по тестовому, еще к одним сам не пошел. Но каждое тестовое давало новый опыт, прибавляя новые строки в резюме. Так что главное пробовать и не надеяться, что все будет сразу.
Одна команда просила написать буфер между многопоточным приложением и базой данных, вторая -- многопоточную факторизацию большого объема чисел. Пробовался и там, и там, на серверного программиста.
Третьи задавали нубовопросы по алгоритмам типа печати односвязного списка в обратную сторону и всякие общие штуки типа "как бы вы написали таблицу лидеров".
А можешь дать пример тестового? Хочу знать, что они делают на самом деле игры делают, конечно же
Пиздос. Забился под шконку.
Да вот та же фигня. Я почти уверен, что как минимум вторая фирма не взяла именно из-за того, что я по срокам закопался, потому что старался все сделать идеально и вычитывал часами теорию.
Буст, кстати, мало кто просит. Более того, как правило в тестовых требуют обходиться голой STL вообще без библиотек.
Да я просто пытаюсь учиться не просто выполняя примеры из учебника, а пиля что-то свое, пытаясь делать это по уму.
И вот по задачи я столкнулся с тем, что нужен JSON парсер, и парсер командной строки. Если JSON парсер я нашел, то вот командную строку парсить довольно сложно.
Прочитал, что все это готово в Boost.
С моего опыта буст былв желаемых у половины, мфл у процентов 10. Зато знакомство с никс осями на уровне юзера у трех четвертей, а гит у 90 процентов.
Справедливо.
http://pastebin.com/xX2mRtCT
Почему первый цикл считает первым элементом (первым элементом массива b, равного тому же элементу массива a) просто первый элемент?
Если убираю промежуточные переменные в начале функции, то находит правильно, но тогда второй цикл (копирование элементов) не выполняется, в чем проблема?
1) делаешь поток;
2) отправляешь в поток функцию с бесконечным циклом с ожиданием по std::chrono;
3) делаешь из потока коллбэк каждый такт цикла.
Вот тебе простенький независимый и точный таймер.
Сначала я запилил класс, который считает всякие задачи по математики.
Cls obj(1, 56, 45) //инициализируем.
obj.run() //выполняет всякое говно.
obj.result() //возвращает массив с ответом.
Теперь я решил окошки при помощи QT прикрутить. У меня тут сразу же вопрос: как захуячить матрицу грамотно? Под каждый элемент пилить отдельный QtLineEdit? А если нужно будет прямо на ходу увеличить\уменьшить матрицу?
А теперь непосредственно к сабжу. Как захуячить грамотные Exceptions? Где и как их надо обрабатывать и так, чтобы они были информативны.
Вот, например, подключу я свою библиотеку в Qt-проект, аля #include "myLib.h", где будет весь функционал лежать, а как теперь выкидывать сообщения пользователю о том, что прилетел Exception? И ещё как сделать их более информативными
run()
{
if(a==0)
throw MyExc("Divided by zero");
else
return b/a;
}
try{
obj.run()
}
catch(Excetion &e){
std::cout << "Error was deteted" << e.what() << std::endl;
}
Что-то типо в этом роде? Ничего больше в голову не приходит.
Сначала я запилил класс, который считает всякие задачи по математики.
Cls obj(1, 56, 45) //инициализируем.
obj.run() //выполняет всякое говно.
obj.result() //возвращает массив с ответом.
Теперь я решил окошки при помощи QT прикрутить. У меня тут сразу же вопрос: как захуячить матрицу грамотно? Под каждый элемент пилить отдельный QtLineEdit? А если нужно будет прямо на ходу увеличить\уменьшить матрицу?
А теперь непосредственно к сабжу. Как захуячить грамотные Exceptions? Где и как их надо обрабатывать и так, чтобы они были информативны.
Вот, например, подключу я свою библиотеку в Qt-проект, аля #include "myLib.h", где будет весь функционал лежать, а как теперь выкидывать сообщения пользователю о том, что прилетел Exception? И ещё как сделать их более информативными
run()
{
if(a==0)
throw MyExc("Divided by zero");
else
return b/a;
}
try{
obj.run()
}
catch(Excetion &e){
std::cout << "Error was deteted" << e.what() << std::endl;
}
Что-то типо в этом роде? Ничего больше в голову не приходит.
Кури QTableWidget, если я правильно понял задачу из твоей крайне хуевой формулировки, то это то, что тебе нужно.
А грамотные исключения хуячатся следующим образом: ты берешь и забываешь о существовании подобного механизма. Исключения это безплюсовщина и двадцатый век. Пора уже в современность.
>Кури QTableWidget, если я правильно понял задачу из твоей крайне хуевой формулировки, то это то, что тебе нужно.
О, походу почти то, что надо. Буду курить.
>Пора уже в современность.
И какая нынче современность? Как пилить ошибки?
Ручками проверять условия. Использование исключений говорит о том, что ты не понимаешь, что у тебя в коде происходит и не можешь конкретизировать место ошибки.
Нет, бывают ситуации, когда это реально невозможно, но они крайне редкие и маловероятные.
Ну серьезно, где у тебя в программе может возникнуть ошибка, которую ты не можешь отловить заранее?
Круто твою мамку в рот бомбить, а в программировании стоит выбирать нормальные механизмы, а не крутые.
увы, не завезли
>QT
>QtLineEdit
Ты специально, да? Хочешь, чтобы моя жопа на кварки распалась?
Алсо, либо, как сказал >>456396, QTableWidget, либо динамически создавай/удаляй QLineEdit'ы (хотя это уебанский способ). Про исключения забудь, это дрисня носорога для ебанутых тырпрайзщиков с миллионами строк бойлерплейта, в котором даже автор не разберется, потому что ему похуй на свою программу, лишь бы денег срубить, а думает пусть кто-то другой (в итоге не думает никто, все только и делают, что кидают и ловят исключения). Он (>>456408) все верно сказал.
В общем погуглил я немного, пришел в итоге вот к такой конструкции:
std::chrono::high_resolution_clock::now().time_since_epoch().count()
Теперь планирую сохранять её данные в переменныую и сравнивать каждый раз разницу.
Это правильный подход, или я опять наделал хуйни?
>std::chrono::high_resolution_clock::now().time_since_epoch().count()
На что только не идут байтоебы, чтобы не использовать нормальный фреймворк. Напомнило AbstractSingletonProxyFactoryBean.
Будто вообще есть выбор. Qt. Для консолеговна и древних калькуляторов boost (хотя буст это не фреймворк).
Нет, блять, нельзя, разработчики строго установили размер 3х4. Пиздец вопросы. Открой хоть раз доки.
Ну да, лучше использовать костыль на каждую мелкую проблему. Буст хоть заюзай http://www.boost.org/doc/libs/1_57_0/doc/html/boost_asio/tutorial/tuttimer2.html
Ловля ошибки деления на ноль с помощью исключения это какой-то запредельный пиздос. Такая-то важная ошибка, ну никак руками нули не откинешь!
Вообще, если тебе приходится использовать исключения, значит, у тебя какие-то пиздарики с архитектурой, причем серьезные.
Может есть что попроще Qt? Или же получше? Что-то в последнее время слишком часто в программировании/от программистов слышу, что лучше юзать Qt.
Странно это, неужели только один годный фреймворк существует?
Кьют все любят за то, что это предельно простой фреймворк с очень качественной справкой, встроенной в фирменную IDE, который может практически все. Там и полный набор виджетов и model/view для случаев, когда виджеты не справляются, и работа с сетью, и БД, и потоки, и регэкспы, и трехмерная графика, и даже работа со звуком -- причем все делается максимально просто и без выебонов.
Я могу сказать как человек, который на STL начал писать уже после Кьюта -- в основном процесс сводился к "каким десятком строчек реализовать то, что под Кьютом делалось в две строки".
Короче, не ленись и пиздуй изучать Кьют.
Алсо, я за все время работы с ним помню один или два случая, когда не нашлось стандартного кьютовского объекта для решения моей проблемы.
Подписываюсь под каждым словом. Альтернатив по факту нет. Проще уже некуда, возможности по части GUI оставляют далеко позади все другие фреймворки. По части non-GUI разве что буст будет мощнее, но он гораздо сложнее и некрасивый (хотя это уже вкусовщина).
Ну, есть два пути обучения -- от низкого уровня к высокому и от высокого к низкому. Мне больше нравится второй, потому что удобнее сначала узнать, что такое собака в целом, а потом -- что у нее внутри. Но тут думай сам.
Qt-программеров ищут меньше, чем чистых плюсовиков, но порядком. Есть одна проблема -- Qt пока еще не шибко оценили в мобильном секторе и вообще фронтэнде, поэтому в основном вакансии с Qt будут из НИИ. Так что, как бы ты не шел, изучить STL тебе необходимо.
Важный момент: не забывай про C++11/14. Они еще не очень широко применяются, но писать в этих стандартах куда как удобнее.
Если функция принимает неправильный аргумент, её не должно ебать, по какой причине она приняла неправильный аргумент. С этим пускай на уровень выше разбираются.
Ты мне бы лучше пояснил, как быть.
Я хочу гибридную программку: gui на qt и консольный интерфейс.
Суть этой программки в работе с самодельной библиотекой, которая решает одну мат задачу. inb4: Уебывай со своими лабораторками. Пишу чисто для себя, лол.
В ней три метода:
1. Конструктор, который принимает три параметра(<int>, <vector<vector>>, <vector>)
-Как проверить, что именно нужные типы пришли?
-Как захуячить проверку того, что второй вектор является квадратной матрицей?
-Как возвращать ошибки? Просто return INCORRECT_MATRIX;?
2. Метод run(), который вычисляет всю эту приблуду. В нем просто несколько функций, которые одна за другой вычисляют нужные данные. Схематично:
int run()
{
int temp = 0;
if((temp = doFoo()) != 0){ return temp; } //doFoo бросает 0, если все хорошо, и больше нуля, если все плохо.
if((temp = doBar()) != 0){return temp;}
//И так ещё несколько разных функций, которые обсчитывают некоторые данные.
return SUCCESS;
//В самом конце функции. Пользовательская программа уже может обработать и понять, что можно уже запросить результаты.
}
Тут самое интересное. Я хочу реализовать много поточность на этом этапе. Ведь пользователю, может быть, придется обсчитывать много данных:
-Как вообще должна правильно организовать многопоточность? Например, мне надо обсчитать 10 задач. Пользователь вводит, что хочет посчитать в 3 потоках, аля app.exe -t 3. И программа должна распределить задачи по потокам, поставить в очередь и т.д.
-Как проинформировать пользователя, что вычисления закончились? И можно попросить результат.
-Где хранить результат? У меня была идея хуячить вектора в связанный список, а потом тупо его выплевывать пользователю. Однако там может быть не один вектор, а целая куча данных. (до 5 матриц).
Ты мне бы лучше пояснил, как быть.
Я хочу гибридную программку: gui на qt и консольный интерфейс.
Суть этой программки в работе с самодельной библиотекой, которая решает одну мат задачу. inb4: Уебывай со своими лабораторками. Пишу чисто для себя, лол.
В ней три метода:
1. Конструктор, который принимает три параметра(<int>, <vector<vector>>, <vector>)
-Как проверить, что именно нужные типы пришли?
-Как захуячить проверку того, что второй вектор является квадратной матрицей?
-Как возвращать ошибки? Просто return INCORRECT_MATRIX;?
2. Метод run(), который вычисляет всю эту приблуду. В нем просто несколько функций, которые одна за другой вычисляют нужные данные. Схематично:
int run()
{
int temp = 0;
if((temp = doFoo()) != 0){ return temp; } //doFoo бросает 0, если все хорошо, и больше нуля, если все плохо.
if((temp = doBar()) != 0){return temp;}
//И так ещё несколько разных функций, которые обсчитывают некоторые данные.
return SUCCESS;
//В самом конце функции. Пользовательская программа уже может обработать и понять, что можно уже запросить результаты.
}
Тут самое интересное. Я хочу реализовать много поточность на этом этапе. Ведь пользователю, может быть, придется обсчитывать много данных:
-Как вообще должна правильно организовать многопоточность? Например, мне надо обсчитать 10 задач. Пользователь вводит, что хочет посчитать в 3 потоках, аля app.exe -t 3. И программа должна распределить задачи по потокам, поставить в очередь и т.д.
-Как проинформировать пользователя, что вычисления закончились? И можно попросить результат.
-Где хранить результат? У меня была идея хуячить вектора в связанный список, а потом тупо его выплевывать пользователю. Однако там может быть не один вектор, а целая куча данных. (до 5 матриц).
А да. И ещё про GUI.
Вот пользователь пишет через консольку:
app.exe --window
Адекватен ли вариант в функции main реализовать подобную конструкцию:
int main()
{
key // параметры командной строки, я их boost'ом разбираю их парсером.
if(key == "h") {getHelp();}
if(key == "b") {coreApp();} //типа консольная часть, которая реализует консольные возможности;
if(key == "window") {QApplication app(argc, argv); return app.exec();} //Запускаем уже GUI;
return 0;
}
Я вообще ещё не совсем понимаю, как это все функционирует(в плане GUI), поэтому, наверное, спрашиваю хуйню. Или это совсем уебанский вариант?
Тут часть кода только. При попытке скомпилировать с последней строчкой - ошибка компиляции. Почему?
>Как проверить, что именно нужные типы пришли?
В крестах нет дженериков, как в жабе, так что если ты объявил параметр как std::vector<int>, то это будет вектор из int'ов. Ничего проверять не надо.
>Как захуячить проверку того, что второй вектор является квадратной матрицей?
Создать тип Matrix с методом isSquare, где уже производить проверку, считая количество строк/столбцов.
>Как возвращать ошибки? Просто return INCORRECT_MATRIX;?
Для проверки объекта на ошибки в его состоянии (скажем, неправильные аргументы конструктора) делаешь метод isValid для класса, если же нужен конкретный тип ошибки, то что-то типа метода error, возвращающего один из элементов enum Error (в том числе NoError, если ошибки нет).
>Как вообще должна правильно организовать многопоточность
QFuture<ResultType> f = QtConcurrent::run(&function, arg1, arg2, ...);
QFutureWatcher<ResultType> *w = new QFutureWatcher<ResultType>;
connect(w, SIGNAL(finished()), receiver, SLOT(taskFinished()));
w->setFuture(f);
>вектор
>вектор
>вектор
Говно без задач. Используй list. Чтобы использовать вектор, нужно понимать, когда его надо использовать и почему.
>Адекватен ли вариант
Нет.
yourapp.exe - сосноль
yourapp-gui.exe - GUI. Гуи запускают внутри yourapp.exe и обмениваются данными через stdin/stdout/сокеты/локальные сокеты (пайп и т.п.).
Хрустальный шар что-то подвис немного, щас дравйвер астрала переустановлю и угадаю. Полный код давай, долбоеб.
>если же нужен конкретный тип ошибки
Можно пример реализации, заинтересовало.
>QFuture<ResultType> f = QtConcurrent::run(&function, arg1, arg2, ...);
Бля, не в том вопрос.
1. Многопоточностью должна заниматься пользовательская программа или математическая библиотека?
2. Можно ли без Qt (boost, STL) и
>automatically adjust the number of threads used according to the number of processor cores available.
А только пользовательская настройка (аля сколько потоков создавать на каждую задачу)? Или это слишком ебливо и не стоит об этом думать.
>yourapp.exe - сосноль
Есть статья с примерами? Нихуя не понял.
>Можно пример реализации, заинтересовало.
http://pastebin.com/0Y5dGLja
>Многопоточностью должна заниматься пользовательская программа или математическая библиотека?
Зависит от задач. Откуда я знаю, что тебе надо. В общем случае какие-то рекомендации дать невозможно.
>Можно ли без Qt
Можно. Гугли сам.
>А только пользовательская настройка (аля сколько потоков создавать на каждую задачу)?
QThreadPool::globalInstance()->setMaxThreadCount(100); (Но смысла в этом никакого, быстрее по понятным причинам не станет. Это имеет смысл только для задач, которые слабо процессор, типа работы с сетью.)
>Есть статья с примерами? Нихуя не понял.
Есть. В гугле. Хотя, если не понял, то рано тебе еще. Побольше опыта будет, тогда берись.
Так же это должно быть "на горячую".
Пока у меня крайне убого выглядит. Хранится, например, так:
static const string LibraryInitName = "library_call_init"
typedef bool(LibraryInit)();
LibraryInit lib_initer;
И уже цепляется GetProcAddress или же dlsym. В зависимости от текущей ОС.
По сути либа должна содержать не более 5 обязательных функций.
Подобного типа: init(), uninit(), task_main(void *data), ... ;
Как вы понимаете, то решение крайне узкое. Есть ли какой-то более элегантный и расширяемый вариант?
#include <iostream>
#include <conio>
#include <windows>
#pragma hdrstop
//---------------------------------------------------------------------------
using namespace std;
char Rus(const char);
#pragma argsused
int main(int argc, char argv[])
{
char str[50], str1[50] = ""; // исходная строка
int k; // кол-во позиций для сдвига
int choice; // значение выбора действия
char m[32]; // массив русский алфавит
char s[32]; // массив преобразованный
int strlength;
char b = 128;
for(int i = 0; i < 32; i++)
{
m = b;
b++;
}
cout << Rus("Введите строковое сообщение: ") << endl;
gets(str);
cout << Rus("Введите количество позиций для сдвига") << endl;
cin >> k;
getchar();
if(k > 0)
for(int i = 0; i < 32; i++)
{
s[(i + k)%32] = m;
}
else
for(int i = 0; i < 32; i++)
{
s = m[(i - k)%32];
}
cout << Rus("Алфавит: ") << endl;
for(int i = 0; i < 32; i++) // вывод обычный алфавит
{
cout << m;
}
cout << endl;
for(int i = 0; i < 32; i++) // вывод шифрованный
{
cout << s;
}
cout << endl << endl;
cout << Rus("Для выбора действия выберите число") << endl;
cout << Rus("1 - шифрование") << endl;
cout << Rus("2 - дешифровка") << endl;
cin >> choice;
strlength = strlen(str);
if (choice == 1)
{
for(int i = 0; i < strlength; ++i)
{
str1 = m[str % 32];
}
}
else if (choice == 2)
{
for(int i = 0; i < strlength; ++i)
{
str1 = s[str - k % 32];
}
}
cout << endl << Rus("Результат:") << endl;
cout << str1 << endl;
cout << "----------------------------" << endl;
getch();
return 0;
}
//---------------------------------------------------------------------------
char Rus(const char *text)
{
static char BufRus[255];
CharToOem(text, BufRus);
return BufRus;
}
#include <iostream>
#include <conio>
#include <windows>
#pragma hdrstop
//---------------------------------------------------------------------------
using namespace std;
char Rus(const char);
#pragma argsused
int main(int argc, char argv[])
{
char str[50], str1[50] = ""; // исходная строка
int k; // кол-во позиций для сдвига
int choice; // значение выбора действия
char m[32]; // массив русский алфавит
char s[32]; // массив преобразованный
int strlength;
char b = 128;
for(int i = 0; i < 32; i++)
{
m = b;
b++;
}
cout << Rus("Введите строковое сообщение: ") << endl;
gets(str);
cout << Rus("Введите количество позиций для сдвига") << endl;
cin >> k;
getchar();
if(k > 0)
for(int i = 0; i < 32; i++)
{
s[(i + k)%32] = m;
}
else
for(int i = 0; i < 32; i++)
{
s = m[(i - k)%32];
}
cout << Rus("Алфавит: ") << endl;
for(int i = 0; i < 32; i++) // вывод обычный алфавит
{
cout << m;
}
cout << endl;
for(int i = 0; i < 32; i++) // вывод шифрованный
{
cout << s;
}
cout << endl << endl;
cout << Rus("Для выбора действия выберите число") << endl;
cout << Rus("1 - шифрование") << endl;
cout << Rus("2 - дешифровка") << endl;
cin >> choice;
strlength = strlen(str);
if (choice == 1)
{
for(int i = 0; i < strlength; ++i)
{
str1 = m[str % 32];
}
}
else if (choice == 2)
{
for(int i = 0; i < strlength; ++i)
{
str1 = s[str - k % 32];
}
}
cout << endl << Rus("Результат:") << endl;
cout << str1 << endl;
cout << "----------------------------" << endl;
getch();
return 0;
}
//---------------------------------------------------------------------------
char Rus(const char *text)
{
static char BufRus[255];
CharToOem(text, BufRus);
return BufRus;
}
Пошол нахуй
а у тебя классные вопросы.
ладно, не буду быдлом как все тут, отвечу - разыменование указателя - операция получения по адресу указателя его содержимого.
int v = 10; int p = &v;
std::cout << p; // разыменование
ну ты понел там вездочка перед р
#include <stdio.h>
#include <cstring>
const int SIZE = 1024;
//Следующая функция осуществляет конкатенацию си-строк.
//Результирующая строка возвращается в качестве значения функции.
char cat(const char s1, const char s2)
{
\tchar result = new char[strlen(s1) + strlen(s2) + 1];
\twhile (result++ = s1++)
\t\t;
\tresult--;
\twhile (result++ = s2++)
\t\t;
\treturn result;
}
//Тест.
int main()
{
\tchar s1[SIZE];
\tscanf_s("%1023s", s1);
\tchar s2[SIZE];
\tscanf_s("%1023s", s2);
\tprintf("%s", cat(s1, s2));
\treturn 0;
}
[/code]
При попытке запуска ошибка: "Необработанное исключение по адресу 0x0F381340 (msvcr120d.dll) в cat.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0x00CE0000."
Прошу ссаными тряпками не гнать, я шкальник и сам осознаю свою ничтожность.
#include <stdio.h>
#include <cstring>
const int SIZE = 1024;
//Следующая функция осуществляет конкатенацию си-строк.
//Результирующая строка возвращается в качестве значения функции.
char cat(const char s1, const char s2)
{
\tchar result = new char[strlen(s1) + strlen(s2) + 1];
\twhile (result++ = s1++)
\t\t;
\tresult--;
\twhile (result++ = s2++)
\t\t;
\treturn result;
}
//Тест.
int main()
{
\tchar s1[SIZE];
\tscanf_s("%1023s", s1);
\tchar s2[SIZE];
\tscanf_s("%1023s", s2);
\tprintf("%s", cat(s1, s2));
\treturn 0;
}
[/code]
При попытке запуска ошибка: "Необработанное исключение по адресу 0x0F381340 (msvcr120d.dll) в cat.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0x00CE0000."
Прошу ссаными тряпками не гнать, я шкальник и сам осознаю свою ничтожность.
Вы видите копию треда, сохраненную 17 апреля 2015 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.