Appending a value to a nested QList
I am trying to append values to a QList
inside another QList
but it doesn't seem to work?
Here is a MCVE of my problem where I try to append int values:
#include <QList>
#include <QDebug>
int main(int argc, char *argv) {
QList<QList<int>> my_list;
int result;
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 4; ++j) {
result = i * j;
my_list.value(i).push_back(result);
qDebug() << my_list.size() << "," << my_list.value(i).size() << " : " << my_list.value(i).value(j);
}
}
return 0;
}
This yields:
Starting C:Users ... buildreleasename_of_the_app.exe...
0 , 0 : 0
0 , 0 : 0
0 , 0 : 0
0 , 0 : 0
0 , 0 : 0
0 , 0 : 0
0 , 0 : 0
0 , 0 : 0
C:Users ... buildreleasename_of_the_app.exe exited with code 0
Can anyone please tell me what I'm doing wrong?
qt nested append push-back qlist
add a comment |
I am trying to append values to a QList
inside another QList
but it doesn't seem to work?
Here is a MCVE of my problem where I try to append int values:
#include <QList>
#include <QDebug>
int main(int argc, char *argv) {
QList<QList<int>> my_list;
int result;
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 4; ++j) {
result = i * j;
my_list.value(i).push_back(result);
qDebug() << my_list.size() << "," << my_list.value(i).size() << " : " << my_list.value(i).value(j);
}
}
return 0;
}
This yields:
Starting C:Users ... buildreleasename_of_the_app.exe...
0 , 0 : 0
0 , 0 : 0
0 , 0 : 0
0 , 0 : 0
0 , 0 : 0
0 , 0 : 0
0 , 0 : 0
0 , 0 : 0
C:Users ... buildreleasename_of_the_app.exe exited with code 0
Can anyone please tell me what I'm doing wrong?
qt nested append push-back qlist
add a comment |
I am trying to append values to a QList
inside another QList
but it doesn't seem to work?
Here is a MCVE of my problem where I try to append int values:
#include <QList>
#include <QDebug>
int main(int argc, char *argv) {
QList<QList<int>> my_list;
int result;
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 4; ++j) {
result = i * j;
my_list.value(i).push_back(result);
qDebug() << my_list.size() << "," << my_list.value(i).size() << " : " << my_list.value(i).value(j);
}
}
return 0;
}
This yields:
Starting C:Users ... buildreleasename_of_the_app.exe...
0 , 0 : 0
0 , 0 : 0
0 , 0 : 0
0 , 0 : 0
0 , 0 : 0
0 , 0 : 0
0 , 0 : 0
0 , 0 : 0
C:Users ... buildreleasename_of_the_app.exe exited with code 0
Can anyone please tell me what I'm doing wrong?
qt nested append push-back qlist
I am trying to append values to a QList
inside another QList
but it doesn't seem to work?
Here is a MCVE of my problem where I try to append int values:
#include <QList>
#include <QDebug>
int main(int argc, char *argv) {
QList<QList<int>> my_list;
int result;
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 4; ++j) {
result = i * j;
my_list.value(i).push_back(result);
qDebug() << my_list.size() << "," << my_list.value(i).size() << " : " << my_list.value(i).value(j);
}
}
return 0;
}
This yields:
Starting C:Users ... buildreleasename_of_the_app.exe...
0 , 0 : 0
0 , 0 : 0
0 , 0 : 0
0 , 0 : 0
0 , 0 : 0
0 , 0 : 0
0 , 0 : 0
0 , 0 : 0
C:Users ... buildreleasename_of_the_app.exe exited with code 0
Can anyone please tell me what I'm doing wrong?
qt nested append push-back qlist
qt nested append push-back qlist
edited Nov 20 at 18:43
TrebuchetMS
1,9861618
1,9861618
asked Nov 20 at 17:52
Matt
106
106
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
There are two issues with this code sample:
First:
The container my_list
hasn't been initialised yet. The line
my_list.value(i).push_back(result);
doesn't actually push values into the container (as we might have hoped).
In your code, i
is always out of bounds. (Since my_list
will always have size 0.) As a result, and according to the documentation,
If the index i is out of bounds, the function returns a default-constructed value.
Since this default-constructed value isn't assigned anywhere, it will most probably be allocated on the heap and be left sitting there until destructed.
Further accesses into my_list
such as qDebug() << my_list.value(i).size()
will default-construct another QList (since again, i
is out of bounds).
Make sure you already have QList<int>
ready to push values into.
Second:
The value()
method returns a const reference to the QList which does not allow modification (same for at()
). If you want to push values to a QList you should use the instead of the
value()
method.
The following code does what you want:
for (int i = 0; i < 2; ++i) {
my_list.push_back(QList<int>()); // first appends a new QList at index `i`
for (int j = 0; j < 4; ++j) {
result = i * j;
my_list[i].push_back(result); // safely retrieves QList at index `i` and adds an element
}
}
There where two issues with my code. Your answer addressed the first (major) issue (thanks!) and allowed me to further correct my code. I added it to your answer as an edit.
– Matt
Nov 20 at 18:42
I've approved the edit. 👍 Didn't realise.value()
didn't provide a reference. I usually only useand
.at()
. :-)
– TrebuchetMS
Nov 20 at 18:44
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53398765%2fappending-a-value-to-a-nested-qlist%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
There are two issues with this code sample:
First:
The container my_list
hasn't been initialised yet. The line
my_list.value(i).push_back(result);
doesn't actually push values into the container (as we might have hoped).
In your code, i
is always out of bounds. (Since my_list
will always have size 0.) As a result, and according to the documentation,
If the index i is out of bounds, the function returns a default-constructed value.
Since this default-constructed value isn't assigned anywhere, it will most probably be allocated on the heap and be left sitting there until destructed.
Further accesses into my_list
such as qDebug() << my_list.value(i).size()
will default-construct another QList (since again, i
is out of bounds).
Make sure you already have QList<int>
ready to push values into.
Second:
The value()
method returns a const reference to the QList which does not allow modification (same for at()
). If you want to push values to a QList you should use the instead of the
value()
method.
The following code does what you want:
for (int i = 0; i < 2; ++i) {
my_list.push_back(QList<int>()); // first appends a new QList at index `i`
for (int j = 0; j < 4; ++j) {
result = i * j;
my_list[i].push_back(result); // safely retrieves QList at index `i` and adds an element
}
}
There where two issues with my code. Your answer addressed the first (major) issue (thanks!) and allowed me to further correct my code. I added it to your answer as an edit.
– Matt
Nov 20 at 18:42
I've approved the edit. 👍 Didn't realise.value()
didn't provide a reference. I usually only useand
.at()
. :-)
– TrebuchetMS
Nov 20 at 18:44
add a comment |
There are two issues with this code sample:
First:
The container my_list
hasn't been initialised yet. The line
my_list.value(i).push_back(result);
doesn't actually push values into the container (as we might have hoped).
In your code, i
is always out of bounds. (Since my_list
will always have size 0.) As a result, and according to the documentation,
If the index i is out of bounds, the function returns a default-constructed value.
Since this default-constructed value isn't assigned anywhere, it will most probably be allocated on the heap and be left sitting there until destructed.
Further accesses into my_list
such as qDebug() << my_list.value(i).size()
will default-construct another QList (since again, i
is out of bounds).
Make sure you already have QList<int>
ready to push values into.
Second:
The value()
method returns a const reference to the QList which does not allow modification (same for at()
). If you want to push values to a QList you should use the instead of the
value()
method.
The following code does what you want:
for (int i = 0; i < 2; ++i) {
my_list.push_back(QList<int>()); // first appends a new QList at index `i`
for (int j = 0; j < 4; ++j) {
result = i * j;
my_list[i].push_back(result); // safely retrieves QList at index `i` and adds an element
}
}
There where two issues with my code. Your answer addressed the first (major) issue (thanks!) and allowed me to further correct my code. I added it to your answer as an edit.
– Matt
Nov 20 at 18:42
I've approved the edit. 👍 Didn't realise.value()
didn't provide a reference. I usually only useand
.at()
. :-)
– TrebuchetMS
Nov 20 at 18:44
add a comment |
There are two issues with this code sample:
First:
The container my_list
hasn't been initialised yet. The line
my_list.value(i).push_back(result);
doesn't actually push values into the container (as we might have hoped).
In your code, i
is always out of bounds. (Since my_list
will always have size 0.) As a result, and according to the documentation,
If the index i is out of bounds, the function returns a default-constructed value.
Since this default-constructed value isn't assigned anywhere, it will most probably be allocated on the heap and be left sitting there until destructed.
Further accesses into my_list
such as qDebug() << my_list.value(i).size()
will default-construct another QList (since again, i
is out of bounds).
Make sure you already have QList<int>
ready to push values into.
Second:
The value()
method returns a const reference to the QList which does not allow modification (same for at()
). If you want to push values to a QList you should use the instead of the
value()
method.
The following code does what you want:
for (int i = 0; i < 2; ++i) {
my_list.push_back(QList<int>()); // first appends a new QList at index `i`
for (int j = 0; j < 4; ++j) {
result = i * j;
my_list[i].push_back(result); // safely retrieves QList at index `i` and adds an element
}
}
There are two issues with this code sample:
First:
The container my_list
hasn't been initialised yet. The line
my_list.value(i).push_back(result);
doesn't actually push values into the container (as we might have hoped).
In your code, i
is always out of bounds. (Since my_list
will always have size 0.) As a result, and according to the documentation,
If the index i is out of bounds, the function returns a default-constructed value.
Since this default-constructed value isn't assigned anywhere, it will most probably be allocated on the heap and be left sitting there until destructed.
Further accesses into my_list
such as qDebug() << my_list.value(i).size()
will default-construct another QList (since again, i
is out of bounds).
Make sure you already have QList<int>
ready to push values into.
Second:
The value()
method returns a const reference to the QList which does not allow modification (same for at()
). If you want to push values to a QList you should use the instead of the
value()
method.
The following code does what you want:
for (int i = 0; i < 2; ++i) {
my_list.push_back(QList<int>()); // first appends a new QList at index `i`
for (int j = 0; j < 4; ++j) {
result = i * j;
my_list[i].push_back(result); // safely retrieves QList at index `i` and adds an element
}
}
edited Nov 21 at 0:19
Matt
106
106
answered Nov 20 at 18:04
TrebuchetMS
1,9861618
1,9861618
There where two issues with my code. Your answer addressed the first (major) issue (thanks!) and allowed me to further correct my code. I added it to your answer as an edit.
– Matt
Nov 20 at 18:42
I've approved the edit. 👍 Didn't realise.value()
didn't provide a reference. I usually only useand
.at()
. :-)
– TrebuchetMS
Nov 20 at 18:44
add a comment |
There where two issues with my code. Your answer addressed the first (major) issue (thanks!) and allowed me to further correct my code. I added it to your answer as an edit.
– Matt
Nov 20 at 18:42
I've approved the edit. 👍 Didn't realise.value()
didn't provide a reference. I usually only useand
.at()
. :-)
– TrebuchetMS
Nov 20 at 18:44
There where two issues with my code. Your answer addressed the first (major) issue (thanks!) and allowed me to further correct my code. I added it to your answer as an edit.
– Matt
Nov 20 at 18:42
There where two issues with my code. Your answer addressed the first (major) issue (thanks!) and allowed me to further correct my code. I added it to your answer as an edit.
– Matt
Nov 20 at 18:42
I've approved the edit. 👍 Didn't realise
.value()
didn't provide a reference. I usually only use
and .at()
. :-)– TrebuchetMS
Nov 20 at 18:44
I've approved the edit. 👍 Didn't realise
.value()
didn't provide a reference. I usually only use
and .at()
. :-)– TrebuchetMS
Nov 20 at 18:44
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53398765%2fappending-a-value-to-a-nested-qlist%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown