The variable ScreenLettersP_s is an array of pointers, so the reference ScreenLettersP_s[LetterVertexDataincrement] is one of the actual pointers. The leading asterisk on ScreenLettersP_s means an extra level of indirection which is not required (or valid).
No. Pointers are pointers whatever they point at, be it an array or a structure. Think about a piece of memory as a sequence of cells. So a pointer to any cell allows you to access all the following cells in order, by using an index (pointer plus offset). If you (the programmer) have decided that the area you point to should be treated as if it contains different sized blocks (aka a structure), that does not affect the physical properties of the memory. It merely allows the compiler to calculate the distance between the elements of the structure. And an array of pointers is much the same thing.
If you have trouble visualising multi levels of indirection, then always go for a single level. If you have an array of pointers, then create a temporary one and allocate an array entry to it like:
CUSTOMVERTEX ** ScreenLettersP_s = new CUSTOMVERTEX* [NumberOfTextBuffers]; // an array of struct pointers
CUSTOMVERTEX* pTemp = ScreenLettersP_s; // get the first pointer in the array
pTemp-> // now access the struct items.
I have not used DirectX, but I have used plenty of other Windows' functions that use structures, arrays of structures, and even arrays of structures that contain other unstructured structures. In the latter case, the presence or absence of certain items depends on settings elsewhere.
It is the actual address in the pointer. In that way you can address any array, or any structure just by passing the real address to the function.
void myFunc(char* someData, int length)
for (int i = 0; i < length; ++i)
char c = toUpper(someData[i]);
someData[i] = c; // comnvert the string to upper case
You can now call that function with any array of any length and get it converted.
In every case the function receives the physical address of the array and accesses each
character by using the index value i, where 0 <= i < length.
You can do either of these, depending on what you want to do:
// pass read only array of intsvoid process_Carray(intconst* values, int n_values);
template <int size> // caution: this will create a separate function for each array size!void process_C11array(std::array<int,size> const& values);
void process_vector(std::vector<int> const& values);
// pass read/write array of intsvoid process_Carray(int* values, int n_values);
template <int size> // caution: this will create a separate function for each array size!void process_C11array(std::array<int,size>& values);
void process_vector(std::vector<int>& values);
The first variant is deprecated in C++, it should be restricted to pure C code.
The second variant is useful if you know the size of your arrays at compile time (and it's always the same)
The third variant is the most flexible as you don't need to know the array size, and you can even add more values within your function if you desire.
GOTOs are a bit like wire coat hangers: they tend to breed in the darkness, such that where there once were few, eventually there are many, and the program's architecture collapses beneath them. (Fran Poretto)
error C2440: 'initializing': cannot convert from 'BSTR' to 'ATL::CStringT<char,strtraitmfc_dll<char,atl::chtraitscrt<_chartype>>>'
1>note: Constructor for class 'ATL::CStringT<char,strtraitmfc_dll<char,atl::chtraitscrt<_chartype>>>' is declared 'explicit'
Code is here
// CSiBatchJobMigrationDlg dialog
CSiBatchJobMigrationDlg::CSiBatchJobMigrationDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSiBatchJobMigrationDlg::IDD, pParent)
m_sDatabase = _T("");
m_leaveDevRow = TRUE;
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_pMenu = new CMenu;
Giving me error in below line
SiBatchJobUpdateDlg updateDlg = SiBatchJobUpdateDlg(this);
Code was working fine in VS2010 but getting this error after migration from vs2010 to vs2017
There are a total of P levels. For any level p, there are Jp nodes. Any two nodes on the same level are not connected. And the unidirectional path weight between any two nodes Ai and Bj is D(i,j).
What is the shortest distance required from the first layer to the Pth layer?
(** Note that P is generally large and it is not recommended to traverse all possible situations **)
If this problem is abstracted as a graph, then what is actually required is the shortest path from the first layer to the last layer of a fully connected network.
What I have tried:
Use deep search, Dijkstra algorithm, Floydw algorithm, etc. to search the shortest path from all J1 nodes in the first layer to the last layer in turn, and select the minimum value from the J1 values.
What I want to know is if there is a simpler algorithm to solve this problem?
If I understand this correctly, you're looking for a unidirectional path from the first layer to the pth layer, a path that includes each layer only once.
I would start with the second layer. Assign each node its shortest distance from the first layer, and record the first layer node whose edge was selected. Then proceed through each layer in the same way: for each node, find its shortest distance from the nodes in the previous layer (the current weight of a previous node plus its edge to the current layer). Eventually you will find the shortest distances to nodes in the pth layer, and thus the shortest path to that layer.