我正在尝试将文本文件中的整数值读入矢量。
输入文件ip1.txt
具有以下内容:
4
-1000 -2000 -3000 -4000
int maxsub(vector<int> a, int size)
{
a.erase(a.begin());
vector<int> sum;
for(vector<int>::iterator w=a.begin(); w <= a.begin()+size-1; ++w)
{
int j;
int s=*w;
for(int t=0; t <= size-1; t++)
{
j = s + a[t];
sum.push_back(j);
}
a.pop_back();
}
std::sort(sum.begin(),sum.end());
int u = sum.size()-1;
int m = sum.at(u);
return m;
}
int main()
{
std::vector<int> nums( (std::istream_iterator<int>(std::cin)),
std::istream_iterator<int>() );
int k = nums[0];
int u = maxsub(nums,k);
cout << u <<endl;
}
我收到“超出内存限制”的警告信息
如何在输入文件中将向量重新读取到只读-4000,我正在使用文件重定向 * ./ 123&lt; ip1.txt *
答案 0 :(得分:1)
源代码中的错误。 maxsub()
中的所有循环for(vector<int>::iterator w=a.begin(); w <= a.begin()+size-1; ++w)
for(int t=0; t <= size-1; t++)
具有从0到大小为1的元素的迭代(=所有元素中的大小),但是在代码
之后a.erase(a.begin());
vector'a'只有(size-1)个元素。 因此,所有的运营商都是“边界之外”。 我想,这是警告信息的原因。
答案 1 :(得分:0)
如果您知道第一个数字是矢量的长度,为什么不利用它?:
int length = 0;
std::cin >> length;
std::vector<int> numbers;
numbers.reserve(length);
然后你可以使用简单的for
循环来检查数字是否已从流中成功提取,并且还可以防止读取超过特定数量的数字:
int number;
for (int i = 0; (i < length) && (std::cin >> number); ++i)
{
numbers.push_back(number);
}
不要忘记#include <iostream>
,#include <sstream>
和#include <vector>
。另请注意,std::cin
可以轻松替换为文件流:)
答案 2 :(得分:0)
写一个for循环
std::vector<int> nums;
int size;
std::cin >> size;
for (int i = 0; i < size; ++i)
{
int val;
std::cin >> val;
nums.push_back(val);
}
答案 3 :(得分:0)
'a.begin()+ size-1'在begin()之前:
具有
for(vector<int>::iterator w=a.begin(); w <= a.begin()+size-1; ++w)
和
int k = nums[0];
int u = maxsub(nums,k);
和
nums[0] = -1000;
尺寸为-1000
如果要排除第一个和最后一个元素:
if( ! a.empty()) {
// Not erasing the first element: a.erase(a.begin());
for(vector<int>::size_type i = 1; i < a.size() - 1; ++i);
}