push AX ; передать значение регистра AX в стек
push ВX ; передать значение регистра BX в стек
.... ; ваш код
pop BX ; извлечь значение из стека в регистр AX
pop AX ; извлечь значение из стека в регистр AX
std::vector<int> Counter;
for (int i = 0; i <= n; i++)
{
Counter.push_back(i);
}
std::map<int, int> Counter;
for (int i = 0; i <= n; i++)
{
Counter[i] = i;
}
#include <iostream>
#include <conio.h>
#include <vector>
using namespace std;
int main()
{
int rez;
int arr_src[] = {1,8,3,2};
std::vector<int> arr(arr_src, arr_src + sizeof(arr_src)/sizeof(arr_src[0]));
arr.push_back(7);
arr.push_back(8);
rez = arr.size(); //кол-во элементов в массиве
cout << rez << endl;
for (int i = 0; i < rez; i++)
cout << arr[i] << ' ';
getch();
return 0;
}
получается mainx узнает о том что есть функция printx() на этапе линковки [mainx.o] и [printx.o]?
Каким образом происходит передача информации в [mainx] что функция printx() существует?
objdump -dr mainx.o
...
0000000000000000 <main>:
0: 55 push %rbp
...
3a: 89 c7 mov %eax,%edi
3c: e8 00 00 00 00 callq 41 <main+0x41>
3d: R_X86_64_PLT32 _Z6printxi-0x4
41: b8 00 00 00 00 mov $0x0,%eax
46: c9 leaveq
47: c3 retq
...
readelf -a mainx.o
...
Relocation section '.rela.text' at offset 0x580 contains 12 entries:
Offset Info Type Sym. Value Sym. Name + Addend
...
00000000003d 001400000004 R_X86_64_PLT32 0000000000000000 _Z6printxi - 4
...
Symbol table '.symtab' contains 25 entries:
Num: Value Size Type Bind Vis Ndx Name
...
20: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND _Z6printxi
...
readelf -a printx.cpp
...
Symbol table '.symtab' contains 24 entries:
Num: Value Size Type Bind Vis Ndx Name
...
14: 0000000000000000 75 FUNC GLOBAL DEFAULT 1 _Z6printxi
...
l=[a_1,..,a_n] – некоторый список элементов типа T, а f:T→T, то:
map(f,l)↦[f(a_1 ),..,f(a_n )]
Не понятно что она делает и как ее реализовать.
#include <stddef.h>
struct list {
struct list *next;
};
struct list *map(void f(struct list *p), struct list *l)
{
struct list *i;
for (i = l; i != NULL; i = i->next)
f(i);
return l;
}
struct list_int {
struct list list;
int i;
};
void process_int(struct list *l)
{
struct list_int *p = (struct list_int *)l;
++p->i;
}
int main()
{
struct list_int l[] = {
[0] = {
.list.next = &l[1].list,
.i = 1,
},
[1] = {
.i = 2,
},
};
map(process_int, &l[0].list);
}
Ремонт ЗАКОНЧИТЬ нельзя — его можно только ПРЕКРАТИТЬ.- © Михаил Жванецкий
https://www.inpearls.ru/