在C ++中创建和从多维向量中获取值的问题

时间:2015-12-08 11:32:42

标签: c++ vector multidimensional-array

我在使用C ++中的多维数组创建和获取值时遇到问题。我花了很长时间试图弄清楚为什么这不是编译。这里有什么问题?

代码如下; vector<vector<string>> vec; vec[0][0] = "asd"; cout << vec[0][0] << endl;

2 个答案:

答案 0 :(得分:1)

您不能使用下标运算符为空向量赋值。

您可以使用emplace_backpush_backinsert

等方法

例如

std::vector<std::vector<std::string>> vec;

vec.emplace_back( 1, "asd" );
vec.push_back( { 1, "fgh" } );
vec.insert( vec.end(), { 1, "jkl" } );

std::cout << vec[0][0] << std::endl;
std::cout << vec[1][0] << std::endl;
std::cout << vec[2][0] << std::endl;

或者您最初可以使用所需数量的元素创建矢量。在这种情况下,您可以使用下标运算符。

例如

std::vector<std::vector<std::string>> vec( 1, std::vector<std::string>( 1 ) );

vec[0][0] = "asd";

std::cout << vec[0][0] << std::endl;

有很多方法可以完成这项任务。例如,您可以使用以下方法

std::vector<std::vector<std::string>> vec;
vec.resize( 1 );
vec[0].resize( 1 );

vec[0][0] = "asd";

std::cout << vec[0][0] << std::endl;

答案 1 :(得分:0)

您应该阅读构造函数的文档。当你这样做时:

public class IntWithUnitProperty : ProductProperty
{
    [Required]
    public int Value { get; set; }

    public string Unit { get; set; }
}

RenameColumn(table: "dbo.ProductProperties", name: "Value1", newName: "Value2");
RenameColumn(table: "dbo.ProductProperties", name: "Value2", newName: "Value3");
AlterColumn("dbo.ProductProperties", "Value1", c => c.Int());
AlterColumn("dbo.ProductProperties", "Value2", c => c.String());

你有两次UB,因为你试图访问向量中不存在的元素。第一行只是创建一个空向量。你要么想推新元素:

Int...

或将大小传递给构造函数:

vector<string> vec;
vec[0] = "asd";
cout << vec[0] << endl;

对于2D,这将是:

vector<string> vec;
vec.push_back("asd");
cout << vec[0] << endl;

或:

size_t start_size=10;
vector<string> vec(start_size);
vec[0] = "asd";
cout << vec[0] << endl;

但是,使用typedef vector<vector<string>> MAT; MAT mat; vector<string> vec; vec.push_back("asd"); mat.push_back(vec); cout << mat[0][0] << endl; 通常是不可取的。