vector使用过程出现的问题记录
程序员文章站
2024-02-10 13:17:46
...
1不知道为毛的错误
vector<vector<int>> A;
int temp;
A.resize(4);
for ( auto &vec :A)
{
vec.resize(4);
}
for (int i = 0; i < A.size(); i++)
{
for (int j = 0; j < A[i].size(); j++)
{
//cout << A[i].size();
cin >> temp;
//A[i][j] = temp;
A[i].push_back(temp);
}
}
在电脑上运行如上碰到问题:一直输入没有自动跳出,当把A.size(),A[i].size()换成4之后可以运行。
单独输出A[i].size(),和A.size()也是4,很奇怪,做个记号。
换成A[i][j] = temp赋值的时候问题消失???为毛
2.vector subscript out of range问题
出现问题的代码行:
for (int i = 0; i <= A.size(); i++) {
reverse(A[i].begin(), A[i].end());
for (int j = 0; j <= A[i].size(); j++) {
if (A[i][j] == 1)
{
A[i][j] = 0;
}
else {
A[i][j] = 1;
}
}
}
问题:使用下标可能出现的越界。上面判断条件应该是i < A.size()和j < A[i].size()
3冒泡问题的进一步认识(leetcode905)
错误做法:
for (int i = 0; i < A.size()-1; i++) {
for (int j = i; j < A.size()-1; j++)
{
if ((A[j]%2)==1&&(A[j+1]%2==0))
{
temp = A[j];
A[j] = A[j + 1];
A[j + 1] = temp;
}
}
}
把一个vector中的偶数放前面奇数放后面,想到了冒泡算法,但是做出来是错误的,不管是从前面开始冒泡还是从最后,但还是借鉴了一点这个思想,定义了一个count用于交换,交换一次就自加一次。
提交五次,心累,下次要想好再动手写。
int temp;
int count=0;
for (int i = 0; i < A.size(); i++) {
if ((A[i]%2)==0||A[i]==0)
{
temp = A[count];
A[count] = A[i ];
A[i ] = temp;
count++;
}
}
上一篇: php 验证码类