#include<iostream>
#include<string>
#include<stdio.h>
#include<stdlib.h>
//#include<set>
#include<list>
#include<cmath>
//#include<algorithm>
#include<fstream>
#include<vector>
#define max 10000.0
using namespace std;
int main()
{
int n;//number of rooms
cin>>n;
vector<string> room_name(n,"");
for(int i=0;i<n;i++)
{
string tmp;
cin >> tmp;
room_name.push_back(tmp);
}
}
错误分段错误:11仍然发生。
无法找到错误点。知道为什么会这样吗?
答案 0 :(得分:2)
声明一个向量是不够的:与数组不同,它可以增长,因此默认情况下它以固定大小为零开始。
如果您事先知道矢量的大小,可以请求特定大小的矢量(之后也可以增长)
vector<string> room_name(n, ""); // You can supply a different default, or no default here
这会生成100个空字符串的向量,让您在后续循环中访问元素0..n-1。
或者,您可以使用push_back
让您的矢量一次增长一个元素,如下所示:
for(int i=0;i<n;i++)
{
string tmp;
cin >> tmp;
room_name.push_back(tmp);
}
答案 1 :(得分:1)
除非矢量已经调整大小,否则您需要使用push_back
附加到矢量的末尾。
std::vector<int> foo;
for (int i = 0; i < 10; ++i)
{
foo.push_back(i);
}
否则,您需要确保矢量已经调整大小
std::vector<int> foo(10);
或者
std::vector<int> foo;
foo.resize(10);
然后您可以像使用
一样使用索引for (int i = 0; i < 10; ++i)
{
foo[i] = i;
}
如果在调整数组大小之前尝试写入每个索引,则表示内存超出范围。
答案 2 :(得分:0)
你确实要在向量中手动输入1000个字符串吗?:)
使用大写字母定义常态名称也是个好主意。而不是
td
最好写
#define max 10000.0
目前尚不清楚为什么将max定义为浮点数而不是整数。
考虑到你的程序中没有声明变量n。所以该程序无法编译。也许你的意思是max而不是n。
由于向量被定义为空向量
#define MAX 10000.0
即它没有元素,那么你可能不会使用下标运算符在向量中输入值。
您可以使用方法push_back,而不是以下方式
vector<string> room_name;
而不是循环,您可以使用标题vector<string> room_name;
room_name.reserve( n );
for ( int i = 0; i < n; i++ )
{
string s;
cin >> s;
room_name.push_back( s );
}
中声明的标准算法std::copy_n
<algorithm>
如果要输入字符串
#include <iostream>
#include <string>
#include <iterator>
#include <algorithm>
#define N 2
int main()
{
std::vector<std::string>room_name;
room_name.reserve( N );
std::copy_n( std::istream_iterator<std::string>( std::cin ), N,
std::back_inserter( room_name ) );
for ( const std::string &s : room_name ) std::cout << s << std::endl;
return 0;
}
然后程序将从向量
输出它们my_room
your_room